Providing a rebate to a user of a telecommunication plan

ABSTRACT

Systems and methods for processing rebates for a telecommunication subscriber are disclosed herein. Call detail records, related to telecommunication service activity by the telecommunication subscriber, are obtained for a previous billing period. Based on the call detail records, the service cost under a current rate plan is calculated and hypothetical service costs are calculated had the telecommunication subscriber been subscribed under other available rate plans. Then, a rebate is provided to the subscriber based on at least one rate plan that is less expensive than the current rate plan.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation-in-part application of U.S. patentapplication Ser. No. 09/758,815, filed Jan. 11, 2001, now U.S. Pat. No.7,184,749 and entitled “System and Method for Analyzing WirelessCommunication Data,” which claims the benefit of U.S. ProvisionalApplication No. 60/230,846, filed on Sep. 7, 2000, and entitled “Systemand Method for Analyzing Wireless Communications Records and forDetermining Optimal Wireless Communication Service Plans,” both of whichare incorporated by reference herein in their entirety.

TECHNICAL FIELD

The present invention is generally related to wirelesstelecommunication, and, more particularly, is related to a system andmethod for analyzing wireless communication data to enable thedetermination of an optimal wireless communication service plan.

BACKGROUND

Because immediate access to information has become a necessity invirtually all fields of endeavor, including business, finance andscience, communication system usage, particularly for wirelesscommunication systems, is increasing at a substantial rate. Along withthe growth in communication use has come a proliferation of wirelesscommunication service providers. As a result, a variety of wirelesscommunication service alternatives have become available to consumersand businesses alike.

Subscribers to communication services, particularly wirelesscommunication services, and the businesses that may employ them, who aredissatisfied with the quality of service or the value of the serviceprovided by a particular provider, may terminate their current serviceand subscribe to a different service. Unfortunately, due to the vastnumber of communication service providers available, it is difficult todetermine an optimal service plan, as well as optional service packages.In addition, due to the competitive nature of the wireless communicationfield, the cost and options made available with service plans frequentlychange, adding to the difficulty of finding the most optimal serviceplan available at a specific time.

Thus, a heretofore unaddressed need exists in the industry to addressthe aforementioned deficiencies and inadequacies.

SUMMARY

Systems and methods for determining optimal wireless communicationservice plans are disclosed herein. Generally, the system uses at leastone transceiver that is configured to receive billing informationassociated with a subscriber of a telecommunications service under acurrent rate plan that is stored in a storage unit. A processor is alsoused by the system which is configured to: process the subscriberrelated billing information to produce organized data in a callingprofile record for each telecommunication service being used by thesubscriber; create a usage history table and a call detail table withinthe storage unit from the processed billing information; analyze theprocessed data in relation to at least one rate plan of at least onetelecommunication service provider; determine at least one proposed rateplan that would save the subscriber telecommunication costs relative tothe current rate plan, via use of the usage history table and calldetail table; and, produce a report of the at least one proposed rateplan to enable selection of a best telecommunication service providerand a best rate plan.

A method for analyzing wireless communication records and fordetermining optimal wireless communication service plans is alsodisclosed. In this regard, the method can be broadly summarized by thefollowing steps: receiving billing information associated with asubscriber of a telecommunication service under a current rate plan;processing the subscriber related billing information to produceorganized data in a calling profile record for each telecommunicationservice being used by the subscriber; creating a usage history table anda call detail table from the processed billing information; analyzingthe processed data in relation to at least one rate plan of a pluralityof at least one telecommunication service provider; determining at leastone proposed rate plan that would save the subscriber telecommunicationcosts relative to the current rate plan, via use of the usage historytable and call detail table; and producing a report of the at least oneproposed rate plan to enable selection of a best telecommunicationservice provider and a best rate plan.

One advantage of the invention is that it automatically provides asubscriber with the best telecommunication service provider and the bestrate plan without necessitating unnecessary subscriber interaction.

Another advantage is that it improves the quality of service and thevalue of the telecommunication services received by a subscriber.

Other additional systems, methods, and business methods are disclosedfor providing a rebate to a telecommunication user when other availablerate plans are calculated to be more cost-effective than the rate planthat is currently being used. One such method, among others, includescomparing a service cost for telecommunication service usage under acurrent rate plan with a hypothetical service cost had thetelecommunication service usage been contracted under one or more otherrate plans. Based on this comparison, a rebate is provided to thetelecommunication user. As an example, the rebate may be in the form ofa retroactive upgrading of a user to a more cost-effective plan, acredit to the user's account, a check sent to the user's billingaddress, and/or a coupon or gift certificate toward the purchase ofmerchandise or services.

Other systems, methods, features, and advantages will become apparent toone with skill in the art upon examination of the following drawings anddetailed description. It is intended that all such additional systems,methods, features, and advantages be included within this descriptionand protected by the accompanying claims.

BRIEF DESCRIPTION OF THE DRAWINGS

The invention can be better understood with reference to the followingdrawings. Like reference numerals designate corresponding partsthroughout the several views.

FIG. 1 is a block diagram illustrating a system and method for analyzingwireless communications records and advising on optimal wirelesscommunication service plans.

FIG. 2A is a block diagram illustrating a more detailed view of ananalyzing digital processor depicted in FIG. 1.

FIG. 2B is a block diagram illustrating a more detailed view of a clientdigital processor depicted in FIG. 1.

FIG. 3 is a flowchart that illustrates logical steps taken by the MovingAverage Monthly Bill Analysis (MAMBA) system of FIG. 1.

FIG. 4 is a block diagram illustrating a breakdown of an ad hoc profilerprocess according to profiles, optimator, and service plan instanceprocesses.

FIG. 5 illustrates a flowchart of the major MAMBA process of FIG. 1 andits read from/write to interaction with significant data tables.

FIG. 6 is a flowchart illustrating the dataLoader (DL) architecture andprocess of FIG. 5.

FIG. 7 is a flowchart illustrating the dataLoader process of FIG. 6.

FIG. 8 is a flowchart illustrating the build profiles process of FIG. 5,which follows the dataLoader process of FIG. 7.

FIG. 9 is a flowchart illustrating the input and output of the optimatorof FIG. 5, which follows the buildProfile process of FIG. 8.

FIG. 10 is a flowchart illustrating the process of creating rate planevaluations of FIG. 5, which follows the optimator processes of FIG. 9.

FIG. 11 is a flowchart illustrating the process of averaging profiles ofFIG. 5, and how it is implemented.

FIG. 12 is a flowchart illustrating the organization and sequence ofsteps that make up the decidePlan process of the decision engine of FIG.5.

FIG. 13 is a graph plotting period versus weighting factor, for n=0,n=0.5, n=1, n=2, for the output data of the decidePlan process of FIG.12.

FIG. 14 is a flowchart illustrating the build profiles process of FIG.8.

FIG. 15 is a flowchart illustrating the getClientId process of FIG. 14.

FIG. 16 is a flowchart illustrating the getCorpZip process of FIG. 14.

FIG. 17 is a flowchart illustrating the getNumbersByClient process ofFIG. 14.

FIG. 18 is a flowchart illustrating the getZipFromPhone process of FIG.14.

FIG. 19 is a flowchart illustrating the getType process of FIG. 14.

FIG. 20 is a flowchart illustrating the getLataAndState process of FIG.19.

FIG. 21 is a flowchart illustrating the getWhen process of FIG. 14.

FIG. 22 is a flowchart illustrating the getWhere process of FIG. 14.

FIG. 23 is a flowchart illustrating the getZipFromCityState process ofFIG. 22.

FIG. 24 is a flowchart illustrating the getZipCodes process of FIG. 14.

FIG. 25 is a flowchart illustrating the buildProfilesDic process of FIG.14.

FIG. 26 is a flowchart illustrating the addProfileRecord process of FIG.14.

FIG. 27 is a flowchart illustrating the runProfiler process of theoptimator of FIG. 5.

FIG. 28 is a flowchart illustrating the doEval process of FIG. 27.

FIG. 29 is a flowchart illustrating the getUserProfile process of FIG.28.

FIG. 30 is a flowchart illustrating the getProfile process of FIG. 29.

FIG. 31 is a flowchart illustrating the findPackages process of FIG. 28.

FIG. 32 is a flowchart illustrating the getPackagesByZip process of FIG.31.

FIG. 33 is a flowchart illustrating the selectCoveredZIPS process ofFIG. 32.

FIGS. 34A and 34B are flowcharts illustrating the calcCost process ofFIG. 28.

FIGS. 35A and 35B are a continuation of the calcCost process of FIG. 34.

FIG. 36 is a flowchart illustrating the getServicePlanByID process ofFIG. 34.

FIG. 37 is a flowchart illustrating the createEvaluation process of FIG.28.

FIG. 38 is a flowchart illustrating the putEvaluation process of FIG.29.

FIG. 39 is a flowchart illustrating the avgProfilesByClient process ofFIG. 11.

FIG. 40 is a flowchart illustrating the avgProfilesByAccounts process ofFIG. 39.

FIG. 41 is a flowchart illustrating the getProfileRecords process ofFIG. 40.

FIG. 42 is a block diagram illustrating an embodiment of a rebateprocessing system.

FIG. 43 is a flowchart illustrating an embodiment of a rebate generatingprocess.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

The moving average monthly bill analysis (MAMBA) system 100, as isstructurally depicted in FIGS. 1, 2A, and 2B can be implemented insoftware, hardware, or a combination thereof. In the preferredembodiment, as illustrated by way of example in FIG. 2A, the MAMBAsystem 100, along with its associated methodology, is implemented insoftware or firmware, stored in computer memory of the computer system,and executed by a suitable execution system. If implemented in hardware,as in an alternative embodiment, the MAMBA system 100 can be implementedwith any or a combination of the following technologies, which are wellknown in the art: a discrete logic circuit(s) having logic gates forimplementing logic functions upon data signals, an application-specificintegrated circuit (ASIC) having appropriate combinational logicgate(s), programmable gate array(s) (PGA), field programmable gatearray(s) (FPGA), etc.

Note that the MAMBA system 100, when implemented in software, can bestored and transported on any computer-readable medium for use by or inconnection with an instruction execution system, apparatus, or device,such as a computer-based system, processor-containing system, or othersystem that can fetch the instructions from the instruction executionsystem, apparatus, or device and execute the instructions. In thecontext of this document, a “computer-readable medium” can be any meansthat can contain, store, communicate, propagate, or transport theprogram for use by or in connection with the instruction executionsystem, apparatus, or device. The computer-readable medium can be, forexample but not limited to, an electronic, magnetic, optical,electromagnetic, infrared, or semiconductor system, apparatus, device,or propagation medium. More specific examples (a nonexhaustive list) ofthe computer-readable medium would include the following: an electricalconnection (electronic) having one or more wires, a portable computerdiskette (magnetic), a random access memory (RAM) (magnetic), aread-only memory (ROM) (magnetic), an erasable programmable read-onlymemory (EPROM or Flash memory) (magnetic), an optical fiber (optical),and a portable compact disc read-only memory (CDROM) (optical). Notethat the computer-readable medium could even be paper or anothersuitable medium upon which the program is printed, as the program can beelectronically captured, via for instance optical scanning of the paperor other medium, then compiled, interpreted or otherwise processed in asuitable manner if necessary, and then stored in a computer memory. Asan example, the MAMBA system 100 software may be magnetically stored andtransported on a conventional portable computer diskette.

By way of example and illustration, FIG. 1 illustrates a typicalInternet based system upon which the MAMBA system 100 of the presentinvention may be implemented. It should be noted that while the presentdisclosure provides implementation of the MAMBA system 100 within anInternet based system, the MAMBA system 100 need not be provided via useof the Internet. Instead, one of reasonable skill in the art willappreciate that the MAMBA system 100 may be implemented within othermediums, such as, for example, but not limited to, a local area network(LAN), or wide area network (WAN).

Alternatively, instead of implementing the MAMBA system 100 via use ofthe Internet, the MAMBA system 100 may also be implemented via use of afirst transmitting and receiving device such as, but not limited to, amodem located at a customer premises, which is in communication with asecond transmitting and receiving device such as, but not limited to, amodem located at a central office. In accordance with such anembodiment, personal computers may be located at the customer premisesand the central office having logic provided therein to performfunctions in accordance with the MAMBA system 100.

Referring to FIG. 1, a plurality of networks 21A, 211B are shown whereineach network 21 includes multiple digital processors 33, 35, 37. Digitalprocessors 33, 35, 37 within each network 21 may include, but are notlimited to, personal computers, mini computers, laptops, and the like.Each digital processor 33, 35, 37 is typically coupled to a hostprocessor or server 31 a, 31 b for communication among processors 33,35, 37 within the specific corresponding network 21.

The host processor, or server, 31 is coupled to a communication line 41that interconnects or links the networks 21A, 211B to each other,thereby forming an Internet. As such, each of the networks 21A, 21B arecoupled along the communication line 41 to enable access from a digitalprocessor 33 a, 35 a, 37 a of one network 21A to a digital processor 33b, 35 b, 37 b of another network 21B.

A client server 51 is linked to the communication line 41, thusproviding a client with access to the Internet via a client digitalprocessor 53, as further described hereinbelow. In accordance with thepreferred embodiment of the invention, the software for implementationof the MAMBA system 100 is provided by a software program that isoperated and located on an analyzing digital processor 71, and connectedthrough an analyzing server 61, to the communication line 41 forcommunication among the various networks 21A, 211B and/or digitalprocessors 33, 35, 37 and the client connected to the Internet via theclient server 51.

It should be noted that the number of client servers, client digitalprocessors, analyzing digital processors, and analyzing servers maydiffer in accordance with the number of clients provided for by thepresent MAMBA system 100. As an example, if five separately locatedclients were utilizing the MAMBA system 100, five separate clientdigital processors may be connected to a single client server, or fiveseparate client servers.

In accordance with the preferred embodiment of the invention, the clientdigital processor 53 may be any device, such as, but not limited to, apersonal computer, laptop, workstation, or mainframe computer. Further,the networks used by the MAMBA system 100 are preferably secure andencrypted for purposes of ensuring the confidentiality of informationtransmitted within and between the networks 21A, 21B.

The analyzing digital processor 71, further depicted in FIG. 2A, isdesigned to analyze the wireless communication data, received eitherfrom the wireless communication provider, the client, or a third partyin order to determine the optimal wireless communication service plans.As shown by FIG. 2A, the analyzing digital processor 71 includes logicto implement the functions of the MAMBA system 100, hereinafter referredto as the MAMBA software 10, that determines the optimal service planstored within a computer memory 73.

Several embodiments of the analyzing digital processor 71 are possible.The preferred embodiment of analyzing digital processor 71 of FIG. 2Aincludes one or more central processing units (CPUs) 75 that communicatewith, and drive, other elements within the analyzing digital processor71 via a local interface 77, which can include one or more buses. Alocal database 74 may be located within the analyzing digital processor71. It should be noted that the database 74 may also be located remotefrom the analyzing digital processor 71. Furthermore, one or more inputdevices 79, for example, but not limited to, a keyboard or a mouse, canbe used to input data from a user of the analyzing digital processor 71.One or more output devices 81, for example, but not limited to, a screendisplay or a printer, can be used to output data to the user. A networkinterface 83 can be connected to the Internet to transfer data to andfrom the analyzing digital processor 71.

Referring to FIG. 2B, the client digital processor 53 of FIG. 1 isfurther illustrated. Several embodiments of client digital processor 53are possible. In accordance with the preferred embodiment of theinvention, the client digital processor 53 includes one or more CPUs 57that communicate with, and drive, other elements within the clientdigital processor 53 via a local interface 59, which can include one ormore buses. A local database 56 may be located within the client digitalprocessor 53. It should be noted that the database 56 may also belocated remote from the client digital processor 53. The client digitalprocessor 53 also includes a memory 55 that houses software to provide abrowser 16. Furthermore, one or more input devices 62, for example, akeyboard or a mouse, can be used to input data from a user of the clientdigital processor 53. One or more output devices 63, for example, butnot limited to, a screen display or a printer, can be used to outputdata to the user. A network interface 65 can be connected to theInternet to transfer data to and from the client digital processor 53.

FIG. 3 is a flowchart that illustrates logical steps taken by the MAMBAsystem 100. Any process descriptions or blocks in flow chartsillustrated or described in this document should be understood asrepresenting modules, segments, or portions of code which include one ormore executable instructions for implementing specific logical functionsor steps in the process, and alternate implementations are includedwithin the scope of the preferred embodiment of the present invention inwhich functions may be executed out of order from that shown ordiscussed, including substantially concurrently or in reverse order,depending on the functionality involved, as would be understood by thosereasonably skilled in the art of the present invention.

As shown by block 120, data regarding a given cellular account,subscriber, or group of subscribers if the service is provided for acorporate customer, is provided by a carrier. As shown by block 130, thedata is loaded into the analyzing digital processor database 74 by adataloader process 320 (shown in FIG. 5 below). The loaded data is thenanalyzed. Analysis of the loaded data includes, but is not limited to,the steps of: creating a calling profile (block 140) for each billingperiod by running a buildProfile process (explained in detail below,with reference to FIG. 5); identifying optimal service plan options foreach profile period (block 150); and making recommendations as to thebest service plan and options (block 160), wherein service plan optionsare across multiple profile periods, by running a decidePlan process(FIG. 5400). The results are then rendered to a user (block 170). Inaccordance with the preferred embodiment of the invention, the MAMBAsystem 100 then repeats the logical steps beginning with block 130 inaccordance with a predefined periodic basis (block 180). The logicalsteps taken by the MAMBA system 100 are further explained hereinbelow.

The MAMBA system 100 can be offered on an application service provider(ASP) basis to telecommunication personnel at the customer premises, orto purchasing or other appropriate managers or administrators ofwireless services at corporations, government agencies and/or similarorganizations as a “cost assurance” tool. The MAMBA system 100 assuresthat all of the wireless accounts or subscribers under the management orcontrol of administrators are on the best possible service plan, giventheir specific usage profile trends, and therefore minimizes overallexpenditures for wireless services by the enterprise.

The MAMBA system 100 is an extension of the existing “one user at atime” Hypertext Markup Language (HTML)-based profiler application, whichtakes as input from an individual account or subscriber, via an HTML orWeb-based interface, an interactively constructed user-defined profile,i.e., how many minutes of airtime a user may consume according to thethree “W's” that, combined, bound the mobile calling environment: “When”(peak, off-peak, or weekend), “What” (local or toll), and from “Where”(home market or non-home market) the call is made. This calling profile,entered via the profiler HTML page, is then provided as input to ananalysis component labeled an “optimator,” which provides as output thebest set of possible service plans, including optional packages,promotions, etc., based upon the entered calling profile. The resultsare presented to the user in the same HTML/Web-based format.

Several embodiments of a profiler application 200 are possible. By wayof example, the flow of logic comprising one possible embodiment of theprofiler application 200 is shown in FIG. 4. The logic is represented inflow charts that interrelate. In the profiler application 200 of FIG. 4,an inc_plan_loading.asp function 205 collects a user's usage profileinformation via a user interface, such as, but not limited to, anHTML-based input page/screen. The usage profile preferably comprises thefollowing: the expected quantity of wireless usage to be utilized duringa given billing period (usually, but not exclusively, a one monthperiod); how the expected usage will be distributed according totime-of-day and day-of-week; how the usage was expected to bedistributed by local versus toll calling; and the expected distributionaccording to the location where calls are made or received. A dbAccountputProfile function 215, which is connected to a bus_Account putProfilefunction 210, then writes this profile information to the analysisdigital processor database 74.

The bus_Account putProfile function 210 is connected to an optimatordoEval function 250 and to service plan (SP) instances 260, 270 via theinc_plan_loading.asp function 205, which presents the usage profileinformation stored via the dbAccount putProfile function 215 to theoptimator doEval function 250.

The optimator doEval function 250 then presents a list of user-providedZIP codes, symbolic of where the user can purchase service (at leasttheir home zip code and possibly one or more zip codes of locations forthe user's place of employment) from the user profile, to an optimatorfindPackages function 225. The optimator findPackages function 225 is,in turn, connected to an SPPackage getPackagesByZIP function 220 whichdetermines which wireless service plan packages are offered within theuser provided ZIP codes. The SPPackage getPackagesByZIP function 220then presents these wireless service plan packages to the optimatordoEval function 250 via the optimator findPackages function 225. Theoptimator doEval function 250, in turn, presents the plan packages andthe user profile information to an optimator calcCosts function 235which then calls an SPPackage calcCost function 230 to calculate andorganize, from lowest cost to highest cost, the cost of each serviceplan package combination for the given user usage profile. The costinformation is then presented to the optimator doEval function 250 whichuses an optimator createEvaluation function 245 and a dbOptimatorputEvaluation function 240 to write the resulting evaluations, whichrepresent comparison of the user usage profile to available serviceplans, to a database.

Finally, the optimator doEval function 250 utilizes a combination of anSPInstance getEvalID function 255, an SPInstance getEval function 260, adbInstance getSPInstance function 265 and an SPInstance getSPInstancefunction 270 to present the results to the user via theinc_plan_loading.asp function 205.

The MAMBA system 100 extends the ad hoc profiler application 200 into amulti-account or subscriber-automated and recurring process thatprovides an analysis of periodically loaded wireless service usage of agiven account or subscriber, and/or group of accounts or subscribers(e.g., a set of subscribers all employed by the same company and allsubscribing to the same carrier), and determines whether or not thatsubscriber, or group of subscribers, is on the optimal wireless serviceplan according to the particular subscriber's usage patterns across avariable number of service billing periods. If not, the MAMBA system 100suggests alternative cellular service plans that better meet the users'usage patterns and that reduce the overall cost of service to theaccount/subscriber.

FIG. 5 represents the functional “flow” among the major MAMBA system 100components and their read from/write to interaction with the mostsignificant data tables that are most directly utilized or affected bythe analysis. Functionally, the MAMBA system 100 is comprised of thefollowing five (5) processes, which further elaborate upon the flowchart of FIG. 3:

-   1) Using the Data Loader (DL) process 320, call detail records are    imported from either the subscriber or the carrier information    sources 310, either in the form of CDs and/or diskettes provided by    an end user or via direct connection with carriers through file    transfer protocol (FTP) or other communication means, into    usage_history table 330 and call_detail table 340. While this step    is actually not a part of the MAMBA system 100 per se, as the DL    process 320 application may serve the analysis service offered, it    may be a prerequisite process that should be modified in order to    support the MAMBA system 100. Depending upon the final    implementation strategy for the DL process 320, a staging table may    be utilized as a subset of the total data set potentially provided    by each carrier as may be used by the MAMBA system 100. Such a    staging table would allow for a minimum set of data used to populate    the call_detail table 340 to be extracted. It should be noted that    the DL process 320 is further defined with reference to FIGS. 6 and    7 hereinbelow.-   2) In accordance with the second process, the buildProfile process    350 of FIG. 5 is created from the imported call detail tables 340.    The MAMBA system 100 uses the call detail table 340 for a given    billing period to create a calling profile record within a calling    profile table 360, for each account of a given client. The calling    profile record represents in a single data record the wireless    service usage for the client's account, which for a single    subscriber and in a single billing period could represent the sum    total of the information captured by hundreds or thousands of    individual calls as recorded by the wireless service provider in the    form of call detail records (CDRs).-    The calling profile record provides a subscriber's CDRs according    to the following three parameters: “when calls are made/received”,    according to time-of-day and day-of-week; “what kind of calls are    made or received”, either local or toll; and, “where calls are made    or received” which is categorized into home, corporate and/or a    variable number of alternate zip codes. With reference to the    “where” parameter, if the number of alternate zip codes exceeds the    number available for the calling profile record, then an additional    algorithm is used to map the alternate zip codes in excess of those    allowed by the calling profile data record into one of the allowed    alternate zip codes “buckets”. As an example, for four alternate    markets, the MAMBA system 100 uses additional “bucketizing” logic to    map any “where” usage information that goes beyond the four (4)    alternate market buckets onto one of the four (4) markets. It should    be noted that bucketizing is further defined with reference to FIG.    8 hereinbelow.-   3) In accordance with the third process, namely the optimator    process 370, the calling profile records 360 are used by the    optimator process 370, as is further described hereinbelow. The    optimator process 370 evaluates the calling profile records 360 to    determine whether or not the client's current calling plan is the    most cost effective for the usage represented by the calling profile    360 under analysis and recommends a variable number of    cost-effective calling plans. This recommendation may take the form    of a rate plan evaluation record in a service plan (SP) instance    table 380 and at least one linked service plan instance record 390.    It should be noted that the optimator process 370 is further defined    with reference to FIG. 9 hereinbelow.-   4) The fourth process, namely the decide plan process, uses the    decidePlan process 400 to compare the results from the optimator    process 370 to the cost, based upon usage history, for the current    service plan an account, or client subscriber, is using. The    decidePlan process 400 then selects the best possible plan using a    “historical predictor” algorithm and several related statistical    filters that, together, make a decision engine. It should be noted    that the decidePlan process 400 is further defined with reference to    FIG. 12 hereinbelow.-   5) In a fifth process, namely the presentResults process 410, the    MAMBA system 100 renders the recommendations from the optimator    process 370 to the client and executes any actions the client wants    to take as a result of those recommendations. As such, the MAMBA    system 100 gathers information at different points during its    processing and stores that information for use in presentation to    the client in a rendition of the results 410. It should be noted    that the present results process is further described hereinbelow    under the title “Presentation of Recommendations or Actions.”    dataLoader (DL)

FIG. 6 further illustrates the DL architecture and process 320. The DLprocess 320 is used to import data from external data sources, such as,for example, CD-ROMs or other storing mediums, such as diskettesprovided by customers, or through direct data feeds from carriersserving those customers, to populate the database 420, preferably aMicrosoft-structured query Language™ (MS-SQL™) database, which ismanufactured by, and made commonly available from Microsoft Corporation,U.S.A., with the call detail and usage history information used by theMAMBA system 100. Other suitable database packages may be used, of whichMS-SQL™ is merely an example. Preferably, the DL process 320, theresults of which also support the Analysis ASP offering in addition tothe MAMBA system 100, makes use of a set of ActiveX components to loadrequisite data from the provided sources. These components may, forinstance, support the import of data from Microsoft Access™, Dbase IV™,Microsoft Excel™ and Microsoft SQL™ databases 430. It should be notedthat other databases may be used in accordance with the presentinvention.

The DL process 320 makes use of two text files, namely, a “Map” file 440and a “Visual Basic, Scripting Edition (VBS)™” file 450, to flexiblydefine or control the configuration of the data import process. The“Map” file 440 dictates to the DL process 320 how to map incoming datafields to destination data fields. The “VBS” file 450 is used by the DLprocess 320 to perform any custom transformations of input data beforewriting it to a destination, e.g., get dow_id from day_of_week. The Map440 and VBS files 450 are developed as part of the data conversionprocess undertaken whenever new input data formats are presented by acustomer base or carrier relationship base.

The DL process 320 is used to import initial customer data as well as toimport ongoing call detail data. In one implementation of the invention,each of these data loads has a “base” set of user-provided data existingin a destination database, such as, for example, the local database 74located within the analyzing digital processor 71 of FIG. 2A, and thenloads new data into the database. In accordance with the preferredembodiment of the invention, data shown in Table 1 hereinbelow exists inthe database prior to execution of the DL process 320. It should benoted that the following is by no means a conclusive list of data and,as such, other data may exist within the database, or less data mayexist within the database.

TABLE 1 Data Tables that Exists in Database Prior to Running the DLProcess ACCESSORY_ITEMS ACCESSORY_PRODUCT_LINK ACTIVITY ACTIVITY_LINKADDRESS ADDRESS_TYPE BTA CARRIER CARRIER_ADDRESS_LINKCARRIER_CONTACT_LINK CARRIER_DBA CONTACT CONTACT_TYPE COUNTYCOVERAGE_AREA_BTA_LINK COVERAGE_AREA_MRSA_LINK DB_HISTORYFCC_CELL_LICENSE FCC_PCS_LICENSE LERG_FOREIGN LERG_US MRSA MTAMTA_MRSA_LINK NATION PHONE_ITEMS PHONE_PRODUCT_LINK PRODUCT_BUNDLE_ITEMSPRODUCT_FAMILY PRODUCT_INFO_STATUS_TYPE REQUEST_STATUS REQUEST_TYPESERVICE_PLAN SERVICE_PLAN_STATUS_TYPE SP_FEATURE SP_FEATURE_BUNDLESP_FEATURE_BUNDLE_LINK SP_FEATURE_TYPE SP_PACKAGESP_PACKAGE_COVERAGE_LINK SP_PACKAGE_TYPE SP_PHONE_ITEM_LINK SP_TAX STATESTATE_MTA_LINK TECHNOLOGY_TYPE USERINFO_STATUS_TYPE ZIP_CODE

The initial customer data load may then be loaded within the tablesshown in Table 2.

TABLE 2 Data Tables into which Customers Initially Load Data ACCOUNTACCOUNT_ADDRESS_LINK ADDRESS ADDRESS CLIENT CLIENT_ADDRESS_LINKDEPARTMENT PHONE_ITEMS REQUEST_LOOKUP TELEPHONE USAGE_HISTORY USER

In accordance with one embodiment of the DL process 320, in the ongoingcall detail data load the initial customer load may be completed priorto the running of the DL process 320. The ongoing call detail load mayload data into the following tables shown in Table 3.

TABLE 3 Data Tables into which Customers May Load Ongoing Call DetailCALL_DETAIL PACKAGE_INSTANCE SERVICE_PLAN SERVICE_PLAN_INSTANCESP_PACKAGE

The call_detail table shown in Table 3 contains the minimum set ofinformation provided by the wireless providers detailing calls madewhich can be reduced into a single calling_profile by the buildProfileprocess 350. The layout of the call_detail table is shown in Table 4.

TABLE 4 Layout of Call_detail Table Field Name Data Type Call_detail_idInteger Usage_id Integer billing_period Datetime mkt_cycle_end Datetimeinvoice_number Varchar billing_telephone_number Varchar originating_dateDatetime originating_time Varchar originating_city Varcharoriginating_state Varchar terminating_number Varchar call_durationDecimal air_charge Money land_charge Money Surcharge Money Total Moneyuser_last_updt Varchar tmsp_last_updt Datetime dow_id IntegerIt should be noted that the dow_id field, as well as other fields, maycontain a numerical representation of data to be inputted within afield, such as, instead of text for the day of the week that a call wasplaced, using 1=Sunday, 2=Monday, etc.Operation of DataLoader Process

FIG. 7 is a logical diagram that depicts operation of the DL process320. As shown by block 321, the DL process 320 application can bestarted manually or as a result of a trigger event such as the postingof a customer's monthly data on an FTP site, or some similar type ofevent. As shown by block 322, initial user data is then selected. The DLscript process is then run, as shown by block 323.

In accordance with the preferred embodiment of the invention, the DLscript process includes the following steps. As shown by block 324, theDL script process is first started. Parameters are then retrieved fromthe dataloader process 320 application, as shown by block 325. As shownby block 326, the user's authorization is then checked in order to runthe dataloader process 320 application. As shown by block 327, allpre-process SQL scripts are then executed to check theintegrity/validity of the data and to otherwise put the data into theappropriate format for data transformation. Data transformation services(DTS) 328 are then used to load the pre-processed data. As shown byblock 329, all post-process SQL scripts are then executed to confirm theintegrity/validity of the data, after which the DL script is exited(block 331).

After the DL script process 323 is run, the DL process 320 selects awireless service provider, or carrier, provided customer account andrelated (e.g., usage history) data 332. The DL script process is thenrun again 333, after which the DL process 320 selects “CallDetail Data”334. As shown by block 335, the DL script process once again runs, afterwhich the DL application ends block 336.

Build Profile Process

The following further illustrates the build profile process 350 withreference to FIG. 5, in accordance with the preferred embodiment of theinvention. FIG. 5 depicts input and output of the optimator 370. TheMAMBA system 100 provides a method to create calling_profile records 360from the call_detail data 340 imported using the DL process 320. Thesecalling_profile records 360 provide a rolled-up view of each account'scall usage, reducing for a given account or subscriber what may be, forexample, the hundreds or thousands of individual call detail records (N)generated into a single calling_profile record 360. This data reductionreduces the computations performed by optimator 370 in order to analyzea single account or subscriber by a similar amount.

The calling_profile record 360 is created by the buildProfile process350. This record is used by the optimator process 370, which provides aservice plan comparison and generates a list of potential service plansthat may better fit the account or subscriber's particular callingprofile. The calling_profile record 360 contains the fields and sourcedata shown in Table 5.

TABLE 5 Fields and Source Data Contained in calling_profile Record FieldName Data Type Len Source data profile_id Integer IDENTITY fieldaccount_id Integer from the user/account record date_created DateTimecurrent date billing_period DateTime contains the billing periodperiods_averaged Integer contains the number of periods averaged forthis record. monthly_minutes Integer sum of all minutes for a monthpeak_percentage Decimal buildProfile process offpeak_percentage DecimalbuildProfile process local_percentage Decimal buildProfile processhome_zip Varchar 20 From the user/address record corp_zip Varchar 20From the user/client/address record alt_zip1 Varchar 20 buildProfileprocess alt_zip2 Varchar 20 buildProfile process alt_zip3 Varchar 20buildProfile process alt_zip4 Varchar 20 buildProfile processhome_zip_percentage Decimal buildProfile process corp_zip_percentageDecimal buildProfile process alt_zip1_percentage Decimal buildProfileprocess alt_zip2_percentage Decimal buildProfile processalt_zip3_percentage Decimal buildProfile process alt_zip4_percentageDecimal buildProfile process total_calls Integer buildProfile processtotal_rejected_calls Integer buildProfile process user_last_updt Varchar20 Username of person creating record tmsp_last_updt DateTime Currentdate

The originating_city and originating_state from each call_detail record340 may be used to determine the originating postal_code from thezip_code table. This process results in some degree of approximationbecause of the different methods employed by the carriers to input thedestination_city information, e.g. Kansas_cit for Kansas City. However,using both the originating_city and originating_state minimizes thechances of selecting the wrong city, e.g., avoiding selecting Austin,Pa. instead of Austin, Tex., because of including the originating_statein this process.

All calls not made from either the home or corporate zip code areseparated by originating_city, originating_state zip code and the totalnumber of minutes added for each. Once calls have been separated intoseparate zip codes, using one implementation of the buildProfile process350, if there are four or fewer zip codes, the zip codes may be writtento the zip code fields, e.g., alt_zip1, alt_zip2, alt_zip3 and alt_zip4,in descending order by the amount of minutes for each zip code and thecorresponding minutes, as a percentage of the total, may be written tothe corresponding zip code percentage fields, e.g., alt_zip1_percentage,alt_zip2_percentage, alt_zip3_percentage and alt_zip4_percentage.

However, in this particular implementation, if there are more than fourzip code sets, the zip code with the highest number of minutes iswritten to alt_zip 1. Then the remaining zip codes are grouped bycombining zip codes with the same first 3 digits, e.g., 787xx, andadding up the associated minutes.

Once this grouping has been completed, and if there are more than threegroupings in this implementation, the zip code from the grouping withthe highest number of minutes is added to alt_zip2. The remaining zipcodes may then be grouped by combining zip codes with the same first twodigits, e.g., 78xxx, and adding up the associated minutes.

Once this grouping has been completed, and if there are more than twogroupings in this implementation, the zip code from the grouping withthe highest number of minutes is added to alt_zip3. The remaining zipcodes may then be grouped by combining zip codes with the same firstdigit, e.g., 7xxxx, and adding up the associated minutes. Once thisgrouping has been completed, the zip code with the highest number ofminutes may be added to alt_zip4.

Once completed, the percentages may be computed from the total number ofminutes and written to each zip code percentage field, including thehome_zip_percentage and corp_zip_percentage fields. The periods_averagedfield of the buildProfile process 350 contains the number of periodsaveraged to create this record. Records that are created by thebuildProfile process 350 contain a value of 1 in this field. Recordscreated by the “AvgProfilesByClient” or the “AvgProfilesByAccount”functions contain the number of profile records found for the givenclient or account with a billing period during the given dates. However,this value may be decremented due to the fact that the user has changedhome market during that time frame.

Operation of BuildProfile Process

FIG. 8 depicts the operation of a buildProfile process 350. As shown byblock 351, a mambaLaunch application is started either manually or basedupon a trigger event such as those mentioned above. As shown by block352, the buildProfile process 350 calls a “TwiMamba.clsMamba.BuildProfiles” function. As shown by block 353, the buildProfile process 350is then started. As shown by block 354, the process gets “callDetail”records for the accounts for the given client and date range. As shownby block 355, the process analyzes the calls and, as shown in block 356,creates the profiles record. As shown by block 357, the program thenexits the buildProfile process 350. The process then returns to themambaLaunch application and, as shown by block 358, executes a functionwrite profile identifications to file. As shown by block 359, thebuildProfile process 350 then exits mambaLaunch Application.

Data “Bucketizing” Functions

The data “bucketizing” functions, previously mentioned with reference tothe buildProfile process 350 portion of FIG. 5, guide the analyzing andclassifying of the call detail data 340 for use in the MAMBA system 100processes. These functions provide the data classification and reductionused to populate the calling_profile record 360 of the MAMBA system 100.This structure is organized according to three dimensions or parametersof a call, and are as follows:

-   1) “When”: time of day (ToD) and day of week (DoW). “When”    parameters are used to determine when a call was made or received as    determined by three (3) “buckets”: peak, off peak or weekend. The    service plan record of the service plan that a subscriber is    currently using functions as the default ToD and DoW parameters.-   The ToD/DoW parameters are as follows:-    For the subscriber under consideration, if the call_date, dow_id    (1-7 with each number corresponding to a fixed day of the week) is    not between the weekend_start_dow and the weekend_end_dow, and was    placed between weekday_peak_start and weekday_peak_end times, then    the call is characterized as a “peak call.”-    For the subscriber under consideration, if the call_date, dow_id is    not between the weekend_start_dow and the weekend_end_dow, and was    not placed between weekday_peak_start and weekday_peak_end times,    then the call is considered an “off-peak call.”-    If the call_date, dow_id equals the weekend_start_dow and was made    after the weekday_peak_end time or if the call_date, dow_id is on    the weekend_end_dow and was made before the weekday_peak_start time,    or if the call_date, dow_id falls between the weekend_start_dow and    the weekend_end_dow, then the call is considered a “weekend call.”-   2) “What”: Type of Call—local or toll. These parameters determine    the type of call that was made/received as determined by three (3)    “buckets”: local, intrastate_toll and interstate_toll.-   The local/toll parameters are as follows:-    If called_city equals “incoming” or <null> or called_number equals    <null> then the call is a “local call.”-    If the mobile_id_number lata_number (as derived from npa-nxx number    combination)=destination_number lata_number, as derived from the    npa-nxx number combination, then the call is considered to have been    originated and terminated within the same Local Access Transport    Area (LATA) and is therefore categorized as a “local call.” As known    by those skilled in the art, a npa-nxx is defined as the numbering    plan area (NPA) and office code (Nxx) of an end user's telephone    number.-    If neither of the two parameters above is true, then the call is a    “toll call.”-    If the mobile_id_number lata_number state (as derived from the    npa-nxx number combination)=destination_number lata_number state, as    derived from the npa-nxx number combination, then the call is    considered to have originated and terminated within the same sate    and is therefore categorized as an “intrastate_toll call.”-    If none of the above parameters are applicable, then the call is an    “interstate_toll call.”-    These tests may use a table that allows a local access transport    area (LATA) number to be associated with an npa_nxx. The LATA    (npa_xxx) information also contains city and state information. A    Local Exchange Routing Guide (LERG) table may also contain the    information used.-   3) “Where”: Where calls are made or received (home or non-home).    These parameters determine where calls were made or received by the    mobile end of the wireless communications connection represented by    the call detail record under consideration. Several possible buckets    may be defined according to different embodiments of the invention.    By way of example, under one embodiment of a set of data    “bucketizing” parameters, there may be the following six (6)    possible buckets defined: home_zip, corp_zip, alt1_zip, alt2_zip,    alt3_zip, alt4_zip.-   The Home/non-Home parameters are as follows:-    If the originating_city equals <null> or the lata_number of the    originating_city, originating_state pair=the lata_number of    mobile_id_number (npa_nxx matching), then the call was made from the    “Home” region and allocated to the home_zip_percentage. Otherwise,    the call is allocated to either the corporate_zip_percentage or one    of the alt_zip_percentage “buckets, depending upon the zip code    associated with the originating_city and according to the    alt_zip_percentage rules previously defined.    The Optimator Process

FIG. 9 depicts the optimator process 370, and how it is implemented. Theoptimator process 370 uses the calling_profile record 360 for a givensubscriber as input for the analysis of the usage patterns to providerecommendations for the most economical cellular service plans (see FIG.7) for the specific billing period associated with that profile record.Further, the optimator process 370 receives as input the variousservice_plans 720, service_plan (sp) packages 730, and coverage_areas740 that are offered by various carriers and that are associated witheach sp_package 730. The optimator process 370 may return differentnumbers of recommendations per analysis. For example, in oneimplementation, the optimator process 370 returns up to threerecommendations per analysis. The number of recommendations can bechanged through an “instance variable.”

The recommendations are created as records in the service_plan_instance390 and package_instance tables 710. These records are linked to theassociated account by a record in the rate_plan_evaluation table 380which, in turn, is associated with the specific billing periodassociated with the calling_profile record. The optimator process 370returns the identification of this new record.

Operation for Creating Rate Plan Evaluations

FIG. 10 depicts the operation for the process of creating rate planevaluations 440. Block 351 depicts the step of starting the MAMBALaunchApplication. As shown by block 381, a “TwiMAMBA.clsMAMBA.Run Profiler”process is called. As shown by block 382, a “runProfiler” process isstarted. As shown by block 383, the profile identification files createdin block 358 of FIG. 8 are then read. As shown by block 384, a program“TwiOptimzer.Optimator.DoEval” is called. As shown by block 385, a“doEval” process is started. As shown by block 386, the current callingprofile is read. As shown by block 387, the profile for the lower costcalling plans are then evaluated. As shown by block 388, therate_plan_evaluation 380, service plan 390 and package instance 710records are created. As shown by block 389, the doEval process is thenexited. As shown by block 391, the runProfiler process makes thedecision as to whether all profile identifications have been evaluated.If the answer is “no”, the program returns to block 384, in whichTwiOptimzer.Optimator.DoEval function is again called and the programcontinues through each step again until block 391 is reached again. Ifthe answer is “yes” in block 391, the runProfiler process is exited, asshown in block 392. The MAMBAlaunch application then writes the evalidentifications (Ids) to the file, as shown in block 393. Then as shownby block 394, the MAMBAlaunch application is exited.

Averaging Profiles

FIG. 11 depicts the process of averaging profiles 810 and how it isimplemented. The MAMBA system 100 allows the user to obtain a movingaverage 820 of the calling totals assigned to any calling profilerecords 360 that have a billing date within a given date range. Thisaverage 820 provides the user with a snapshot of cellular service usewithin a given period.

AvgProfilesByClient and avgProfilesByAccount (see “The MAMBA Component”)methods (FIGS. 39 and 40) allow the user to average the calling profilesby either client or individual account. These methods create a callingprofile record 820 that contains the average of usage for the callingprofiles 360 created during the given period, and then return theidentification of the new record.

The decidePlan Process

Returning to FIG. 5, the optimator process 370 output, specifically avariable number of service_plan_instances 390, reflects the lowest costoptions based upon the calling profile analyzed. As such, the optimator370 results represent a single point-in-time period, for example, onemonth, for that particular user without taking into account anyhistorical trending information that might be available for that user.What is therefore needed but has been heretofore unaddressed in the art,is a methodology for using a series of single period optimator 370results 390 to determine the optimal service plan for that user over anappropriate period of time, as depicted in FIG. 5. The decidePlanprocess 400 leverages available chronological information to assist inthe determination of what service plan would be optimal for a givenwireless user.

The decidePlan process 400 is based upon what can best be described as a“historical prediction” algorithm. Given the fundamental complexity ofdetermining the optimal service plan solution set, the application of atraditional trend-based predictive methodology, e.g., a linear or otherform of extrapolation, is not practical. Rather, the decidePlan process400 leverages the “hindsight” intrinsic to a series of historical singleperiod optimator 370 analyses in order to predict the optimal solutionlooking forward.

The decidePlan process 400 takes advantage of the “reactive system” typeof behavior that is inherent in the analysis or decision process forselecting the optimal plan for a given subscriber. Specifically, thedecision engine 400 calculates the total cost for a given set ofoptimator 370 generated service_plan_instances 390 over a known set ofhistorical periods. The decidePlan process 400 then compares this totalcost to the optimator 370 results of the correspondingservice_plan_instances 390 for the most recent single period available,and on that basis predicts the optimal service plan going forward.

The known set of historical optimator 370 results is referred to hereinas the “training set,” while the single most recent set of periodresults is referred to as the “test set”, where the test set period canalso be included as part of the training set. An optimal service plansolution is selected from the training set and then compared to theresult of the test set to determine how well the training set would havepredicted the test set result. In implementing the training and testset, the data set to execute the historical prediction analysis ispreferably a minimum of two periods, two periods for the training setand one period for the test set, in order to execute the historicalprediction.

The relative attractiveness of a service plan instance 390 is determinedby comparing it to the corresponding actual billed usage of the currentservice plan for the given period(s). The specific measure, termed“efficiency”, is calculated as the following ratio:efficiency=current plan costs/service plan instance estimated costIf the efficiency factor is greater than 1, then the service planinstance is more cost effective than the current plan. Among a group ofservice plan instances, the plan instance with the highest efficiencyfactor is the optimal solution.

Implementation of the historical prediction analytic and decision-makingmodel is best demonstrated by way of example. Table 6 shows an exemplarytwo period set of optimator 370 results for a single subscriber.

TABLE 6 Example of Historical Prediction Model for a Two Period Set ofResults Efficiency Efficiency Training Set (Current/ Test Set (Current/Month 1 Plan X) Month 2 Plan X) Calling 200 250 Profile MOUs PLANS A $501.38 $50 1.38 B $65 1.06 $65 1.06 C $40 1.73  $45* 1.53* D $60 1.15 $601.15 E  $30* 2.30* $45 1.53* Current $69 1.00 $69 1.00 Where * indicatesthe lowest cost plan optionBased upon this minimum two period data set, the training set predictsplan E as the optimal choice, a selection confirmed by the correspondingresults for the test set (Month 2).

The larger the data set, where larger is measured by the number ofperiods of service plan instance results available for the training set,the better the forward looking “prediction” will likely be. Table 7shows the same two period data set presented earlier in Table 6,extended by an additional four periods, for a total of six periods, withfive applied to the training set and one to the test set.

TABLE 7 Example of Historical Prediction Model for a Six Period Set ofResults Training Set Training Sum Set Mon 6 Mon 1 Mon 2 Mon 3 Mon 4 Mon5 1-5 efficiency Mon 6 Efficiency Calling 200 250 300 260 310 225Profile MOUs PLANS A $50 $50 $60 $60 $62 $282 1.22 $50 1.38 B $65 $65$65 $65 $65 $325 1.06 $65 1.06 C $40 $45 $50 $46 $52  $233*  1.48* $421.64 D $60 $60 $60 $60 $62 $302 1.14 $60 1.15 E $30 $45 $60 $48 $62 $2451.41  $37*  1.86* Current $69 $69 $69 $69 $69 $345 1.00 $69 1.00 Where *indicates the lowest cost plan optionIn this case, use of only the most recent period's, month 6, optimator370 output would have resulted in the selection of plan E as the optimalservice plan option for this user or account. However, applying thehistorical prediction analysis, the total of 1-5 ranked by efficiencyfactor, the optimator 370 output indicates that plan C would be optimalchoice for this user. Although plan E would have been the best option infor the most recent period, month 6, when the variability of thissubscriber's usage profile is taken into account over the available sixperiod data set, plan C would have been selected as the superiorsolution.

The above analysis assumes that the data in the test set has equal“value” in the analysis. In reality, the more recent the data set, orthe “fresher” the data, the more relevant it is to the analysis as itreflects the more recent behavior of the user. Thus, the use of aweighting strategy which gives greater relevance to more current,fresher data as compared to the older, more stale data, improves thepredictive results. Optionally, the weighing strategy can be added tothe decidePlan process if needed to provide such increase relevance tomore recent data.

There are a number of possible weighting functions that can be applied.One possible weighting function would be an exponential envelope of thetype:weighting factor=n+e ^((1−Period)) where n>=0The weighting functions for n=0, n=0.5, n=1 and n=2 are plotted in FIG.13. Data that is four periods old is weighted as 14% of that of the mostrecent month. The n=0 function more aggressively discounts older datathan does the n=1 function, where the same four period back data isweighted at a level about one-half that of the most recent period dataset.

Applying these two versions of exponential weighting envelopes to theprevious six periods of training and test data sets generates the resultset shown in Table 8, with the original “equal weighting” results shownas well for reference.

TABLE 8 Results of Table 7 Data After Applying the Weighting FactorTraining Set Sum Training Set Mon 6 Mon 1 Mon 2 Mon 3 Mon 4 Mon 5 1-5efficiency Mon 6 Efficiency Calling 200 250 300 260  310 225 ProfileMOUs PLANS A $50 $50 $60 $60  $62 $282 1.22 $50 1.38 B $65 $65 $65 $65 $65 $325 1.06 $65 1.06 C $40 $45 $50 $46  $52  $233* 1.48 $42 1.64 D$60 $60 $60 $60  $62 $302 1.14 $60 1.15 E $30 $45 $60 $48  $62 $245 1.41 $37* 1.86* Current $69 $69 $69 $69  $69 $345 1.00 $69 1.00 Weighting 1.02  1.05  1.14  1.37   2.00 Factor n = 1 PLANS A $51 $53 $68 $82 $124$378 1.20 $50 1.38 B $66 $68 $74 $89 $130 $428 1.06 $65 1.06 C $41 $47$57 $63 $104  $312* 1.46* $42 1.64 D $61 $63 $68 $82 $124 $399 1.14 $601.15 E $31 $47 $68 $66 $124 $336 1.35  $37* 1.86* Current $70 $72 $79$95 $138 $454 1.00 $69 1.00 Weighting  0.02  0.05  0.14  0.37   1.00Factor n = 0 PLANS A  $1  $3  $8 $22  $62  $96 1.13 $50 1.38 B  $1  $3 $9 $24  $65 $103 1.06 $65 1.06 C  $1  $2  $7 $17  $52  $79 1.38* $421.64 D  $1  $3  $8 $22  $62  $97 1.13 $60 1.15 E  $1  $2  $8 $18  $62 $91 1.20  $37* 1.86* Current  $1  $3 $10 $26  $69 $109 1.00 $69 1.00Where * indicates the lowest cost plan option

Although the result of the historical prediction analysis in thisspecific scenario does not change per se as a result of applying eitherweighting scheme to the training set, where both the n=1 and n=0weightings identify Plan C as the optimal plan, the application of thesetwo weighting envelopes do have the effect of increasing the “spread”between the efficiency factor of the optimal plan, plan C, as comparedto the next best solution, plan E. This is compared against the actualcost because the weighting function that more heavily favors recent orfresher data, i.e., the n=0 exponential decay envelope, provides agreater efficiency spread (1.38-1.20, or 0.18) compared to the n=1weighting function that less aggressively discounts older or more“stale” data (1.46-1.35 or 0.11).

The methodology, historical prediction with time-based weighting,described thus far does not take into account the intrinsicperiod-to-period variability in the user or account's behavior. One waythis variability is reflected is by the user's usage of the account, asmeasured by the minutes of wireless service use on a period-by-periodbasis. By measuring the standard deviation in a usage set for the useror account, and comparing it to per period usage data, the suitabilityof the data set for each period can be assessed relative to the totalavailable array of periodic data sets. In particular, a significant“discontinuity” in a usage pattern of a user or account, for example, asa result of an extraordinary but temporary amount of business travel,especially if such a spike occurs in a current or near-current dataperiod, could skew the results of the analysis and provide aless-than-optimal service plan solution or recommendation on agoing-forward basis.

To appreciate the potential impact of period-to-period deviations,consider for example two calling profiles arrays: one for the baselinedata set that has been examined thus far, and another for a morevariable data set. These two data sets, their average and standarddeviations and the deviations of the usage profile of each period to theaverage, are shown in Table 9.

TABLE 9 Comparison of Baseline and Variable Data Sets Training Set TestSet 1-5 1-5 1-6 1-6 Mon 1 Mon 2 Mon 3 Mon 4 Mon 5 Ave StdDev Mon 6 AveStdDev Baseline 200 250 300 260 310 264 43.9 225 258 42.4 CallingProfile MOUs Ave. - X 64 14 36 4 46 33 >StdDev yes no no no yes noSecond 350 400 375 600 325 410 109.8 320 395 104.9 Calling Profile MOUsAve. - X 60 10 35 190 85 75 >StdDev no no no yes no no

Using one standard deviation unit (one sigma, or σ) as the “filter” toidentify and exclude discontinuities in a sequence of calling profiles,results in months 1 and 5 of the baseline sequence, and month 4 of thesecond calling profile sequence, being excluded from the analysis.

Another parameter that can be factored into the decision process of thepresent invention of what service plan to select for a given user oraccount, based upon an array of calling profiles and optimator 370service plan instance 390 inputs, is the sensitivity of the result setto changes in calling profile. Specifically, the service plan solutionset, plans A-E in the example used up to this point, should be tested byperturbing the usage profile in a positive and negative fashion by afixed usage amount, for example, one σ. The results are shown in Table10.

TABLE 10 Results of Perturbing the Usage Profile by One Sigma Sum Mon1-5 Training (using n = 0 Set Ave/ Mon 6 +1 Sigma −1 Sigma weighting)efficiency StdDev Mon 6 efficiency Cost eff. Cost eff. Calling 264/43.9225 269 181 Profile MOUs PLANS A $96 1.13 $50 1.38 $52 1.33 $50 1.38 B$103 1.06 $65 1.06 $65 1.06 $65 1.06 C $79 1.38* $42 1.64 $47 1.47* $371.86 D $97 1.13 $60 1.15 $60 1.15 $60 1.15 E $91 1.20 $37 1.86* $471.47* $27 2.56* Current $109 1.00 $69 1.00  $69** 1.00  $69** 1.00Where * indicates the lowest cost plan option **this sensitivity cannotbe performed unless the current plan is known

Based on the above “± one sigma” analysis, the optimal service planoption, minimizing the sensitivity of the decision to variations inusage both up and down, is plan E. Using only the upside variationresults in the selection of plan C. Because there is less sensitivity toan upside in usage than a downside for many wireless service planscurrently offered by the wireless service providers, either weightingthe +1 analysis more heavily than the −1 analysis, or using only the +1analysis results in the selection of plan C.

The implementation of the decision algorithms into the decidePlanprocess must allow for one of the following four (4) possiblerecommendations or actions:

-   -   1. The current plan is optimal; take no action.    -   2. There is a more optimal plan; if the savings is sufficient        (efficiency>1.x) where x is the historical percentage savings,        then change plans.    -   3. As a result of insufficient data, e.g., only one period of        usable data is available, there is a >±1 Sigma variation in the        most recent period's calling profile, etc.; therefore, take no        action, and flag the reason why no action was taken.    -   4. Even though an optimal plan was identified, other parameters        (e.g., a maximum period-to-period variance) were exceeded and        therefore an accurate recommendation cannot be possible.

As with the dataLoad 320, buildProfile 350 and optimator 370 processes,decidePlan 400 can be implemented as a manual or automated process. Thefollowing inputs may be used to launch the decidePlan process 400.Please note that blank spaces indicate input variable numbers that areconsidered to be within the scope of the present invention.

1. Client Name

2. Account: active accounts (default) or _(——————) account file

3. Analysis Parameters

-   -   a. Data window: available periods (default) or _(———)periods    -   b. Calling profile selection filter: yes/no (default no) within        _(———) Sigma    -   c. Sensitivity analysis range: ±_(———)% or ± _(———)Sigma    -   d. Minimum savings filter: _(———)% (default 20%)        FIG. 12 shows the anticipated organization/sequence of steps of        the decision process 900 that make up the decidePlan 400        process, which is described in detail herein below.        Presentation of Recommendations or Actions

If the MAMBA system 100 returns any recommendations for the given user,the MAMBA system 100 takes the user information and the information forthe recommended cellular service plans and dynamically creates a reportWeb page that details this information. The HTML for this report Webpage is stored in the database 74 for later display. Once the report Webpage has been generated, the MAMBA system 100 sends an electronic mailmessage (email) to the specified user informing the user of theavailability of more economical cellular service plans. This email maycontain a hyperlink that will allow them to navigate to the stored HTMLWeb report. The HTML Web report page contains the information shown inTable 11. It should be noted that the presentation may also be madewithout use of the Web, but instead may be presented via any means ofcommunication.

TABLE 11 Information contained in HTML Web Report Client Name DateGenerated Department ID User Name Current Plan Name (hyperlink)Recommend Plan Name 1 (hyperlink) Recommend Plan Name 2 (hyperlink)Recommend Plan Name 3 (hyperlink)

The user information is repeated for all requested users or accounts.The hyperlinks allow the viewer to view the specific information for thegiven plan.

The MAMBA system 100 causes the creation of a table that contains theHTML code for the report Web page and an ID value that will be part ofthe hyperlink that is sent to the user. The MAMBA system 100 may alsocause the fields in Table 12 to be added to the USER table.

TABLE 12 Fields the MAMBA System May Add to USER Table Field Name DataType Length MAMBA Varchar 1 MAMBAMailDate DateTime MAMBAViewDateDateTime MAMBAReviewUser Varchar 50 MAMBAHTML Text 32765

The MAMBA field may contain either a “Y” or “N” to denote to which userto send the MAMBA email for a given account. The MAMBAMailDate maycontain the date the email was sent to the specified user, and theMAMBAReviewDate may contain the date the MAMBA report Web page wasviewed. Further, the MAMBAReviewUser field may contain the user name ofthe person who viewed the MAMBA report Web page. Also, the MAMBAHTMLfield may contain the HTML code for the Web report page.

The MAMBA Component

The MAMBA Component (twiMAMBA) may be configured to implement a numberof different methods, a few of which are shown by example in Tables13-16 for completing the preferred functionality. These methods are asfollows:

TABLE 13 BuildProfile—Method that builds the calling_profile record A.Parameters: Name Type Description IclientID Integer client id to processDloadStartDate Date first date to process DloadEndDate Date last date toprocess IprofileIds( ) Integer array returned array of created profileids InumZips Integer number of zip codes to process B. Returns True—uponsuccessful completion False—upon failed completion

TABLE 14 RunProfiler—Method that launches the optimator process 370 A.Parameters: Name Type Description iProfileIDs( ) Integer array array ofprofile ids—returned by buildProfile dLoadStartDate Date returned arrayof evaluation ids B. Returns: True—upon successful completion False—uponfailed completion

TABLE 15 AvgProfilesByClient—Method that takes a client name, a startand an end date, and then averages the usage totals for all profilerecords with a billing period between those dates and creates a newprofile record. A. Parameters: Name Type Description SclientName stringname of client to process DstartDate date first date to process DendDatedate last date to process IavgProfileIDs( ) integer array array ofaverage profile ids—returned by buildProfile B. Returns: True—uponsuccessful completion False—upon failed completion

TABLE 16 AvgProfilesByAccount—Method that takes an account ID, a startand an end date, and then averages the usage totals for all profilerecords with a billing period between those dates and creates a newprofile record. A. Parameters: Name Type Description IAccountId integeraccount id DStartDate date first date to process DEndDate date last dateto process IAvgProfileIDs( ) integer array array of average profileids—returned by buildProfile B. Returns: True—upon successful completionFalse—upon failed completion

FIG. 12 depicts the decision process 900 of the decidePlan process 400(FIG. 5). The inputs of block 905, client_id, accounts, data_periods,cp_filter, sensitivity_range, and savings_hurdle, are directed to theselect account info function of block 910. The select account info of910 includes account_id, cp_ids, and service_plan_instances. Once theselect account info 910 has been processed, the process proceeds to thedecision block 915, where the decision is made if the cp count is lessthan 2. If “YES”, the process proceeds to block 920, for no actionbecause of insufficient data or records. If the decision of block 915 is“NO”, the process proceeds to block 925 for the functions of determinecp data and set using cp_filter input. From block 925, the process movesto the decision block 930, where the decision is made if the cp count isless than 2. If “YES”, the process again moves to block 920 for noaction because of insufficient trend data. If the decision of block 930is “NO”, the process proceeds to block 935 for the function of createcandidate sp_id list based on most recent period. From the function ofblock 935, the process proceeds to block 940, for the function ofcompare candidate list to sp_ids for sp_instances in all applicableperiods, based on cp list. From block 940, the process then proceeds tothe decision block 950, where the decision is made, “are all sp_idsrepresented in all applicable periods?” If “NO”, the process proceeds toblock 955, for the function of run optimator 370 to create additionalsp_instances. From the function of 955, the process then proceeds to thefunction of block 960, perform historical prediction analysis and rankcandidate sp_ids by efficiency factor. If the decision of block 950 is“YES” (all sp_ids are represented in applicable periods), then theprocess proceeds directly to the function of block 960 of performinghistorical prediction analysis. After the historical prediction analysisof block 960 is complete, the process proceeds to block 965 forperforming sensitivity analysis, and rank candidate sp_ids by relativesensitivity. Once the function of block 965 is complete, the processthen moves to the final step of 970, for recording decision results,mapping to the corresponding action and/or recommendation.

The Application Related to MAMBA System

The following represents a detailed description of the logic of thesystem and method for analyzing the wireless communication records andfor determining optimal wireless communication service plans.

FIG. 14 depicts the operation 1000 of the buildProfile process 350. Inblock 1010, the process begins with the “Enter” function. In block 1020,a decision is made if getClientId is TRUE. If the answer is “NO”, theprocess then goes to the Exit function, shown in block 1220. If theanswer is “YES”, then the process proceeds to block 1040. In block 1040,the decision is made if getCorpZip is TRUE. If not, the process proceedsto the Exit function 1220, if “YES”, the process proceeds to block 1060,where the decision is made if getNumbersByClient (rsNumbers) is TRUE andthe Count is greater than zero. If the answer is “NO”, the processproceeds to the Exit function 1220. If “YES”, the process proceeds toblock 1080, where the decision is made to Do while NOT reNumbers.EOF. Ifthe answer is “NO”, the process goes to Exit function 1220. If “YES”,the process proceeds to block 1100, where the decision is made ifgetZipFromPhone is TRUE. If “NO” the process proceeds to Exit function1220. If “YES”, the process proceeds to block 1120, where the decisionis made if getCallDetailByNumber (rsCallDetail) is TRUE and the Count isgreater than zero. If the answer is “NO”, the process proceeds to theExit function 1220. If “YES”, the process proceeds to block 1140, wherethe decision is made to Do while NOT rsCallDetail.EOF. If the answer is“NO”, the process proceeds to the getZipCodes function of block 1280. Ifthe answer is “YES”, the process proceeds to block 1160, where thedecision is made if getType 1180, getWhen 1200, or getWhere 1221 areFALSE. If the answer is “NO”, the process moves to the“rsCallDetail.MoveNext” function of block 1260. If “YES”, the processmoves to block 1240, where totalRejectedCalls is equal to totalRejectedCalls+1. The process then proceeds to block 1260, where thefunction “rsCallDetail.MoveNext” is performed. Following this function,the system will again move to block 1140, Do while NOT rsCallDetail.EOF.This process is repeated until block 1140 is “NO”, and the processproceeds to the getZipCodes function of block 1280.

The getZipCodes process of block 1280, then proceeds to a decision inblock 1300 if buildProfileDic is TRUE. If “NO”, the process goes to theExit function of block 1220. If “YES”, the process proceeds to block1320 where a decision is made if addProfileRecord is TRUE. If “NO”, theprocess proceeds to Exit function 1220. If “YES”, the process proceedsto block 1340, the “rsNumbers.MoveNext” function. From here, the processthen returns to the decision block 1080 of do while NOT rsNumbers.EOF.

The getClientID process of block 1020 (FIG. 14) is depicted in FIG. 15.The process 1020 begins with block 1021, the Enter function, andcontinues to block 1022, the function of Select ID from client wherename is equal to client name. The process ends in block 1023, the Exitfunction.

The getCorpZip process of block 1040 (FIG. 14) is depicted in FIG. 16.The process 1040 is entered in block 1041, and continues to block 1042,where the postal code is selected from the address. The process ends inblock 1043, the Exit function.

The getNumbersByClient process of block 1060 (FIG. 14) is detailed inFIG. 17. The process begins with block 1061, the Enter function, andcontinues in block 1062, the function Select * from Telephone for clientId. The process ends in block 1063, the Exit function.

The getZipFromPhone process of block 1100 is detailed in FIG. 18. Theprocess 1100 begins with block 1101, the Enter function, and continuesto block 1102, the function call twi_getZipFromPhone stored procedure.The function ends in block 1103, the Exit function.

The getType process 1180 shown in block 1160 (FIG. 14) is detailed inthe flowchart of FIG. 19. The process begins in block 1181, the Enterfunction, and continues in block 1182, where the decision is made ifnumber_called is equal to ‘000’ or ‘555’ or ‘411’ or len equals 3. Ifthe answer of decision block 1182 is “YES”, the process moves to theIncrement local call counter of block 1183, and then exits the processin block 1184. If the decision of block 1182 is “NO”, the process movesto the decision block 1185. In block 1185, the decision is made ifgetLataAndState for called_number and mobile_number is TRUE. If theanswer is “NO”, the process moves to the Exit function block 1184. If“YES”, the process moves to the decision block 1189, where the decisionis made if calledLATA is TollFree. If the answer is “YES”, the processproceeds to block 1183, for an Increment of local call counter. If theanswer of decision block 1189 is “NO”, the process proceeds to thedecision block 1190, where the decision If mobileLATA is equal tocalledLATA. If the decision of block 1190 is “YES”, the process proceedsto the Increment local call counter block 1183, and then the Exitfunction of block 1184. If the decision of block 1190 is “NO”, theprocess proceeds to the decision block 1191, where the decision is madeif mobileState is equal to the calledState. If the answer of decisionblock 1191 is “YES”, the process proceeds to block 1192 for theIncrement Intrastate counter, and then to the Exit function of block1184. If the decision of block 1191 is “NO”, the process proceeds to theIncrement Interstate counter of block 1193, and then to the Exitfunction of block 1184.

The getLataAndState function of block 1185 (FIG. 19) is detailed in theflowchart of FIG. 20. In FIG. 20, the process begins in the Enterfunction in block 1186, and continues to block 1187, the function calltwi_getLataAndState store procedure. Then, the process is exited inblock 1188.

The getWhen function 1200 depicted in block 1160 (FIG. 14) is depictedin the flowchart of FIG. 21. The process is entered in block 1201, andproceeds to the decision block 1202, if dowId is Monday. If the answeris “YES”, the process proceeds to the decision block 1203, where thedecision is made if the callTime is less than peak_start_time. If theanswer of decision block 1203 is “YES”, the block 1204 Increment Weekendcounter is signaled, followed by the Exit function 1205. If the answeris “NO” to decision block 1203, the process proceeds to the decisionblock 1206, where the decision is made if Elself callTime is less thanpeak_end_time. If the answer is “YES”, the process proceeds to block1207 where the Increment Peak counter is signaled, and then the processproceeds to the Exit function 1205. If the decision is “NO” in decisionblock 1206, the process proceeds to block 1208, for the IncrementOffPeak counter, and then proceeds to the Exit function of block 1205.If the decision of block 1202 is “NO” (dowId does not equal Monday),then the process proceeds to decision block 1209, where the decision ismade if dowId is equal to Tuesday-Thursday. If the answer is “YES”, theprocess proceeds to decision block 1210, where the decision is made ifthe callTime is less than the peak_start_time. If the answer to decisionblock 1210 is “YES”, the process proceeds to block 1210, the IncrementOffPeak counter, and then to Exit function of block 1205. If thedecision of block 1210 is “NO”, the process proceeds to block 1212, theincrement peak counter, and then to the Exit function of block 1205. Ifthe decision to block 1209 is “NO” (dowId is not equal toTuesday-Thursday), then the process proceeds to decision block 1213,where the decision is made if the dowId is equal to Friday. If thedecision is “YES”, the process proceeds to the decision block 1214,where the decision is made if callTime is less than peak_start_time. If“YES”, the callTime is less than the peak_start_time, then the processproceeds to block 1215, the increment offpeak counter, and then to theExit function 1205. If the answer to decision block 1214 is “NO”, theprocess proceeds to decision block 1216, and the decision is made ifElself callTime is less than peak_end_time. If the answer is “YES”, theprocess proceeds to the increment peak counter of block 1217, and thento the Exit function of block 1205. If the decision of block 1216 is“NO”, the process proceeds to block 1218, the increment weekend counter,and then to the Exit function of block 1205. If the decision of block1213 is “NO” (the dowId does not equal Friday), then the processproceeds to the decision block 1219, where the decision is made if ElsedowId is equal to Saturday or Sunday. The decision of block 1219 isnecessarily “YES”, wherein the process proceeds to block 1220, theIncrement Weekend counter, and then to the Exit function 1205.

The getWhere process 1221 of block 1160 (FIG. 14) is depicted in theflowchart of FIG. 22. The getWhere process 1221 begins with the Enterfunction in block 1222, and proceeds to the decision block 1223, wherethe decision is made if number_called is equal to ‘000’. If “YES”, theprocess proceeds to block 1224, the Increment HomeZip counter, and thento the Exit function of block 1225. If the decision of block 1223 is“NO”, the process proceeds to the decision block 1226, where thedecision is made if getZipFromCityState (originatingCityState) is TRUE.If the answer to decision block 1226 is “NO”, the process proceeds tothe Exit function of block 1225. If the answer to decision block 1226 is“YES”, the process proceeds to decision block 1230, where the decisionis made if retZip is equal to the homeZip. If “YES”, the processproceeds to block 1224, the Increment HomeZip counter, and then to theExit function of block 1225. If the decision of block 1230 is “NO”, theprocess proceeds to the decision block 1231, where the decision is madeif retZip is equal to corpZip. If the answer to the decision block 1231is “YES”, the process proceeds to block 1232, the Increment CorpZipcounter, and then to the Exit function of block 1225. If the decision ofblock 1231 is “NO”, the process proceeds to block 1233, the Add zip tozipCode dictionary, and then to the Exit function of block 1225.

The getZipFromCityState process referred to in block 1226 (FIG. 22) isdetailed in the flowchart of FIG. 23. The process 1226 begins with theEnter function in block 1227, and then proceeds to the Calltwi_getZipFromCityState stored procedure command of block 1228. Theprocess then exits in block 1229.

The getZipCodes process of 1280 of FIG. 14 is detailed in the flowchartof FIG. 24. The getZipCodes process 1280 begins with the Enter functionin block 1281, and proceeds to the decision block of 1282, where thedecision is made if zipCode count is greater than zero. If “NO”, theprocess proceeds to the Exit function of block 1283. If the zipCodecount is greater than zero (“YES”), the process proceeds to the decisionblock of 1284, wherein the decision is made If zipCode count is greaterthan or equal to max_us_zips. If “NO”, the process proceeds to block1285, the looping operation through zipArray. The zipArray may containany number of items according to several embodiments of the invention.By way of example, in one embodiment, the zipArray contains four items.The process may either then proceed to the decision block 1291, orcontinue on to block 1286, the looping operation through zipDictionary.From block 1286, the process can then either proceed to the decisionblock of 1287 or continue on to block 1290, the function Save max zipand count. At block 1290, the process then returns to the loopingoperation through zipDictionary of block 1286.

If the looping operation through zipDictionary of block 1286 proceedsthrough the decision block of 1287, the decision is made if the max zipand count is greater than the current zipArray item. If “NO”, theprocess returns to block 1285, the looping operation through zipArray.If the answer to decision block 1287 is “YES” (max zip and count aregreater than current zipArray item), then the process proceeds to block1288, where the max zip and count are added to zipArray. The processthen proceeds to block 1289, to remove max zip and count fromdictionary. From block 1289, the process then returns to block 1285, thelooping operation through zipArray. Once the looping operation throughzipArray of block 1285 is completed, the process proceeds to thedecision block 1291, wherein the decision is made if zipDictionary countis greater than zero. If “NO”, the process then proceeds to the Exitfunction of block 1283. If “YES”, the process then proceeds to roll upremaining zip dictionary items in to the first Zip Array item asinstructed in block 1292, and then proceeds to the Exit function ofblock 1283. Returning to the decision block of 1284, if “YES” (ZipCodecount is greater than or equal to max_us_zips), then the processproceeds to the decision block 1293, wherein the decision is made iftestLen is greater than zero. If “NO”, the process proceeds to the Exitfunction of block 1283. If “YES” (testLen is greater than zero), thenthe process proceeds to the function of block 1294, and loopingoperation through all zipCodes in zipDictionary.

The loop then proceeds to block 1295, where tempZip is equal toleft(testLen) characters of zipCode. The process then proceeds to block1296, where the function Add tempZip and count to tempZipDictionary isperformed, and then returns to the looping operation through allzipCodes in zipDictionary of block 1294. If in block 1294 the testLen isequal to the testLen−1, the process proceeds to the Enter function ofblock 1281, and the getZipCodes begins again.

The buildProfilesDic process of block 1300 (FIG. 14) is detailed in theflowchart of FIG. 25. The process 1300 begins with the Enter function ofblock 1301, and proceeds to the decision block 1302, where the decisionis made if total is less than any individual value. If “NO”, the processproceeds to the Exit function of block 1303. If “YES” (total is lessthan any individual value), then the process proceeds to the decisionblock 1304, where the decision is made if the total is greater thanzero. If “NO”, the process proceeds to block 1306, for adding defaultvalues to profile dictionary, and then to the Exit function of block1303. If the decision of block 1304 is “YES” (total is greater thanzero), then the process proceeds to block 1305, for adding actual valuesto profile dictionary, and then to the Exit function of block 1303.

The addProfileRecord process of block 1320 (FIG. 14) is detailed in theflowchart of FIG. 26. The process 1320 begins with the Enter function ofblock 1321. The process then proceeds to block 1323 for inserting intothe calling_profile. The process then ends with the Exit function 1324.

Once the profiles are built, according to the steps detailed in theflowchart of FIGS. 14-26, the profiles are then run, as detailed in theflowchart of FIG. 27. The runProfiler process 1400 begins with the Enterfunction of block 1401, and proceeds to the function of block 1402, ofSet oProfiler=CreateObject(“TWIOptimizer.Optimator”). The process thenproceeds to block 1403, For iCount=0 to Ubound(iProfileIds). From block1403, the process may proceed to block 1404, Set oProfiler=Nothing, andthen to the Exit function of block 1405. Block 1403 may also proceed tothe decision block of 1406, where the decision is made IfoProfiler.DoEval is TRUE. If “NO”, the process then proceeds to the Exitfunction of block 1405. If “YES” (oProfiler.DoEval is TRUE), then theprocess returns to block 1403, For iCount=0 to Ubound(iProfileIds).

The doEval process of block 1406 (FIG. 27) is detailed in the flowchartof FIG. 28. The doEval process 1406 begins with the Enter function ofblock 1410, and proceeds to the decision block 1420, where the decisionis made If getUserProfile is NOT nothing. If “NO”, the process proceedsto the Exit function of block 1440. If “YES” (getUserPrfile is NOTnothing), then the process proceeds to the decision block 1460, wherethe decision is made If findPackages is True. If “NO”, the processproceeds to the Exit function of block 1440. If “YES” (findPackages isTrue), then the process proceeds to the decision block of 1490. In thedecision block of 1490, the decision is made If calcCosts is True. If“NO”, the process proceeds to the Exit function of block 1440. If “YES”,the process then proceeds to block 1600 for createEvaluation, and thento the Exit function 1440.

The getUserProfile process of block 1420 (FIG. 28) is described ingreater detail in the flowchart of FIG. 29. The getUserProfile process1420 begins with the Enter function of block 1425, proceeds to block1430 for Clear out m_dicProfile. The process then proceeds to block 1435for getProfile, and then to the Exit function 1440.

The getProfile process of block 1435 (FIG. 29) is described in greaterdetail in the flowchart of FIG. 30. The getProfile process 1435 beginswith the Enter function of block 1436, and proceeds to block 1437 forSelect from calling_profile. The process then proceeds to the Exitfunction of block 1438.

The findPackages process of block 1460 (FIG. 28) is described in greaterdetail in the flowchart of FIG. 31. The findPackages process 1460 beginswith the Enter function of block 1461, and then proceeds to the decisionblock of 1462, where the decision is made if profile is found. If “NO”,the process proceeds to the Exit function of block 1463. If “YES”(profile is found), the process proceeds to block 1463 for Get home zip,and then to block 1464, twiOptimizer.SPPackage.getPackagesByZIP, wherepackages are added to allPackages dictionary 1465. The process proceedsto block 1466 where it performs the Get corp zip function, and thenproceeds to the decision block of 1467, where the decision is made ifcorp zip is found and corp zip is greater than or less than the homezip. If the decision of block 1467 is “NO”, the process proceeds toblock 1468 for removing all items from m_dicBasePackages. The processthen proceeds to block 1469 for performing the function Add all basepackages form allPackages dictionary to m_dicBasePackages. The processthen proceeds to block 1470 where it performs the function Add allnon-base packages from allPackages dictionary to m_dicBasePackages, andthen proceeds to the Exit function 1463. If the decision of block 1467is “YES” (corp zip is found and corp zip is greater than or less thanhome zip), the process proceeds to block 1464, where it performs thefunction twiOptimizer.SPPackage.getPackagesByZip. The process thenproceeds to block 1465 where it performs the function Add packages toallPackages dictionary. From block 1465, the process continues on toblock 1468, where it performs the function Remove all items fromm_dicBasePackages, and the process continues on until the Exit functionof block 1463.

The getPackagesByZIP process of block 1464 (FIG. 31) is described ingreater detail in the flowchart of FIG. 32. The getPackagesByZIP process1464 begins with the Enter function 1471, and proceeds to the decisionblock 1472, where the decision is made if carriers count is equal tozero. If “NO”, the process proceeds to block 1474, where rs equalsgetPackagesByZipAndCarrier, and then to the decision block 1475. If theanswer to the decision block 1472 is “YES” (carriers count is equal tozero), then the process proceeds to block 1474, where rs equalsgetPackagesByZip. From block 1473, the process then proceeds to thedecision block 1475, where the decision is made if rs is NOT nothing andrs.EOF is FALSE. If the answer is “NO”, the process proceeds to the Exitfunction of block 1476. If the answer to the decision block 1475 is“YES” (rs is NOT nothing and rs.EOF is FALSE), then the process proceedsto block 1477, While NOT rs.EOF.

From block 1477, the process may then proceed to the Exit function ofblock 1476, or it may proceed to block 1478, where it performs thefunction Save rs values to newPackage. From block 1478, the processproceeds to the decision block 1479, where the decision is made ifpackage type equals base or extendedLocalCalling. If “NO”, the processproceeds to the decision block of 1482. If “YES” (package type is equalto base or extendedLocalCalling), the process then proceeds to thedecision block 1480. In the decision block 1480, the decision is madeareZips in package coverage area. If “NO”, the process then proceeds tothe decision block 1482. If “YES” (areZips in package coverage area),then the process proceeds to block 1481, where it performs the functionAdd minutes to newPackage coveredZips.

From block 1481, the process then proceeds to the decision block 1482,where the decision is made is package type equal to Base. The answer tothe decision block 1482 is necessarily “YES”, and the process proceedsto block 1483, where it performs the function Add minutes for Digitaland Analog Roaming. From block 1483, the process proceeds to block 1484,where it performs the function Save profile zip for package.

From block 1484, the process proceeds to block 1485, where it performsthe function Add package to retDic. From block 1485, the process returnsagain to block 1477, and this loop is repeated until the function isrs.EOF. Then the process proceeds from block 1477 to the Exit functionof block 1476.

The selectCoveredZIPs process of block 1480 (FIG. 32) is described ingreater detail in the flowchart of FIG. 33. The selectCoveredZIPsfunction 1480 begins with the Enter function of block 1486, and thenproceeds to block 1487, where it performs the function CallareaZIPsInPackageCoverageArea. Upon completion of the function of block1487, the process proceeds to the Exit function of block 1488.

The calcCosts process of block 1490 (FIG. 28) is described in greaterdetail in the flowcharts of FIG. 34A and FIG. 34B. The process calcCosts1490 begins with the Enter function of block 1491, and proceeds to thedecision block 1492, where the decision is made if profile is found. If“NO”, the process proceeds to the Exit function of block 1493. If “YES”(Profile is Found), the process proceeds to the function of block 1494,For each base package, and then proceeds to the function of block 1495,twiOptimizer.SPPackage.calcCost. From block 1495, the process proceedsto a looping operation beginning with block 1496, for each optionalpackage.

From block 1496, the process can either proceed directly to theCalculate minimum costs function of block 1506, or the function of block1495, twiOptimizer.SPPackage.calcCost. From block 1495, the processproceeds to the decision block 1497, where the decision is made whetherpackage type equals longdistance. If “YES” (package type islongdistance), the process proceeds to the decision block 1498, wherethe decision is made if current savings is greater than max savings. Ifthe answer to the decision block 1498 is “NO” (current savings is notgreater than max savings), the process proceeds to the decision block1500. If “YES” (current savings is greater than max savings), theprocess proceeds to the function of block 1499, Save current savings.

From block 1499, the process then proceeds to the decision block 1500.In the decision block 1500, the decision is made if package type isequal to offpeak, weekend, or offpeakweekend. If “YES” (package type iseither offpeak, weekend, or offpeakweekend), the process proceeds to thedecision block 1501. In the decision block 1501, the decision is madewhether current savings are greater than max savings. If “NO”, theprocess proceeds to the decision block 1503. If “YES” (current savingsare greater than max savings), the process proceeds to the function ofblock 1502, Save current savings.

From block 1502, the package type then proceeds to the decision block1503. If the decision of block 1500 is “NO” (package type is notoffpeak, weekend, or offpeakweekend), then the process proceeds to thedecision block 1503, where the decision is made if package type is equalto extendedLocalCalling. If “NO”, the process returns back to thefunction of block 1406, for each optional package, and then proceeds tothe function of block 1495, twiOptimizer.SPPackage.calcCost, and theprocedure is run again. If the decision of block 1503 is “YES” (packagetype is extendedLocalCalling), the process then proceeds to the decisionblock 1504. In the decision block 1504, the decision is made whethercurrent savings is greater than max savings. If the answer to thedecision of block 1504 is “NO”, the process returns again to the loopingoperation of block 1496, and the procedure is run again for eachoptional package. If the answer to block 1504 is “YES” (current savingsis greater than max savings), then the process proceeds to the functionof block 1505, Save current savings.

From block 1505, the process then returns to block 1496, where theprocedure is repeated. Once the procedures have been calculated for eachoptional package of block 1496, the process then continues on to thefunction of block 1506, Calculate minimum costs. From block 1506, theprocess then proceeds to the function of block 1507, Add costs tom_dicBasePackages. From block 1507, the process proceeds to the functionof block 1508, Use twiOptimizer.ServicePlan.GetServicePlansById to Getactivation fee and add it to m_dicBasePackages.

From block 1508, the process continues to the function of block 1509,Build array of lowest cost package ids. The array may contain any numberof items according to several embodiments of the invention. By way ofexample, in one embodiment of the invention, the array contains threeitems. From block 1509, the process continues to the function of block1510, a looping operation through array of lowest cost package ids andset the matching packages includedInEval flag to true. From block 1510,the process then proceeds to the Exit function of block 1493.

The process for the calcCost function of block 1495 (FIG. 34) isdetailed in the flowchart of FIGS. 35A and 35B. The process 1495 beginswith the Enter function of block 1511, and proceeds to the decisionblock of 1512, where the decision is made if package type is equal tobase. If “YES” (package is base), then the process proceeds to thefunction of block 1513, Calculate peak over minutes. The process thenproceeds to the function of block 1514, Calculate off-peak over minutes,followed by the function of block 1515, Calculate long distance (LD)minutes.

The process then proceeds to the function of block 1516, Calculateroaming minutes, and then to block 1517, Get the total roaming minutesfor those profile ZIPS not in the current calling area. From block 1517,the process proceeds to block 1518, the function Now Calculate thecorresponding costs, and then proceeds to the decision block 1519, wherethe decision is made if package type is longdistance. Further, if thedecision of block 1512 is “NO” (package type is not base), the processproceeds to the decision block of 1519. If the decision of block 1519 is“NO”, the process then proceeds to the decision of block 1523, as towhether Package type is equal to offpeak. If the decision of block 1519is “YES” (package type is equal to longdistance), the process proceedsto the function of block 1520, Calculate the number of minutes over theplan minutes.

From block 1520, the system proceeds to block 1521, the function Findhow much this package saves against the current base package cost. Oncethe function of 1521 is complete, the process moves to the function1522, Now calculate the corresponding costs. Once the function of block1522 is completed, the process then moves to the decision block 1523,where the decision is made if package type is equal to offpeak. If thedecision is “NO”, the process proceeds to the decision block of 1526. Ifthe decision of block 1523 is “YES” (package type is offpeak), then theprocess proceeds to the function of block 1524, Calculate the offpeakminutes cost.

After the function of block 1524, the process proceeds to the functionof block 1525, Find how much this package saves against the current basepackage cost. Upon completion of the function 1525, the process thenproceeds to the decision block of 1526, where the decision is made ifpackage type is equal to weekend. If “NO”, the process proceeds to thedecision block 1529. If the decision of block 1526 is “YES” (packagetype is weekend), then the process proceeds to the function of block1527, Calculate the weekend minutes cost. Upon the completion of thefunction of block 1527, the process proceeds to the function of block1528, Find how much this package saves against the current base packagecost. Upon completion of the function of block 1528, the process willthen proceed to the decision block 1529, where the decision is made ifpackage type is equal to offpeak weekend. If “NO”, the process proceedsto the decision block 1532. If the decision of block 1529 is “YES”(package type is offpeak weekend), then the process proceeds to thefunction of block 1530, Calculate the offpeak minutes cost.

Upon completion of the function of block 1530, the process continues tothe function of block 1531, Find how much this package saves against thecurrent base package cost. Upon completion of this function, the processthen proceeds to the decision block 1532, where the decision is made ifpackage type is equal to extended local calling. If “NO”, the processthen proceeds to the Exit function of block 1535. If the decision ofblock 1532 is “YES” (package is extended local calling), then theprocess proceeds to the function of block 1533, Calculate the extendedlocal calling minutes cost. After the function of block 1533, theprocess continues to the function of block 1534, Find how much thispackage saves against the current base package cost. The process thenproceeds to the Exit function 1535.

The getServicePlanByID process of block 1508 (FIG. 34) is detailed inthe flowchart of FIG. 36. The getServicePlanByID process 1508 beginswith the Enter function of block 1535, and proceeds to the function ofblock 1536, rs equals getServicePlanByID. The process then proceeds tothe decision block 1537, where the decision is made if NOT rs is nothingand NOT rs.EOF. If “NO”, the process proceeds to the Exit function ofblock 1538. If “YES” (NOT rs is nothing and NOT rs.EOF), then theprocess continues to the function of block 1539, Save rs to serviceplanobject. From block 1539, the process then proceeds to the Exit functionof block 1538.

The createEvaluation function of block 1600 (FIG. 28) is detailed in theflowchart of FIG. 37. The process createEvaluation 1600 begins with theEnter function of block 1601, proceeds to the function of block 1620,putEvaluation, and then finishes with the Exit function of block 1640.

The putEvaluation process of block 1620 (FIG. 37) is detailed in theflowchart of FIG. 38. The process putEvalution 1620 begins with theEnter function 1621, proceeds to the function of block 1622, Insert into rate plan evaluation, and then proceeds to the function of block1623, a looping operation through base packages. The process thenproceeds to the decision block 1624, where the decision is made ifincludedInEval is TRUE. If “NO”, the process then proceeds to the nextbase package, as depicted in block 1625.

From block 1625, the process then returns to the looping operation basepackages of block 1623. If the decision of block 1624 is “YES”(includedInEval is TRUE), then the process proceeds to the function ofblock 1627, Insert in to service plan instance. The process thenproceeds to the function of block 1628, Insert in to SPI_RPE_LINK,before proceeding to the function of block 1629, Insert in to packageinstance. The process then continues to the function of block 1630, thelooping operation through optional packages. In the looping operation,the process proceeds to the decision block 1631, where the decision ismade if package selected is True. If “NO”, the looping operation thengoes directly to the next optional package, as shown in block 1633,before returning through to the looping operation through optionalpackages of block 1630. If the decision of block 1631 is “YES” (ifpackage selected is True), then the process proceeds to the function ofblock 1632, Insert in to package instance, and then to the function ofblock 1633 for the next optional package.

Once the looping operation is completed, the process then proceeds fromblock 1633 to the function of block 1625 for the next base package,which is part of the looping operation through based packages asdepicted in block 1623. Once the looping operation through base packagesis complete, the process then moves from block 1625 to the Exit functionof block 1626.

The calling profiles may be averaged by client or account. TheavgProvilesByClient process 1700 is depicted in the flowchart of FIG.39. The avgProfilesByClient process 1700 begins with the Enter functionof block 1701, and proceeds to the decision block 1702, where thedecision is made if getClientId is TRUE. If “NO”, the process thenproceeds to the Exit function of block 1703. If “YES” (getClientId isTRUE), then the process proceeds to the decision block 1704. In block1704, the decision is made If getNumbersByClient (rsNumbers) is TRUE andcount is greater than zero. If “NO”, the process proceeds to the Exitfunction of block 1703. If “YES” (getNumbersByClient (rsNumbers) is TRUEand count is greater than zero), the process proceeds to the decisionblock 1705, where the decision is made Do While NOT rsNumbers.EOF. If“NO”, the process proceeds to the Exit function of block 1703. If “YES”(NOT rsNumbers.EOF), then the process proceeds to the decision block1706.

The decision is made in block 1706 if avgProfilesByAccount is TRUE. If“NO”, the process proceeds to the Exit function of block 1703. If “YES”(avgProfilesByAccount is TRUE), the process proceeds to the function ofblock 1707, rsNumbers.MoveNext. From the function of block 1707, theprocess then returns to the decision block 1705, and is repeated whileNOT rsNumbers.EOF. The getClientId function of block 1702 has beenpreviously described and is depicted in process 1020 (FIG. 15). ThegetNumbersByClient function of block 1704 has been previously describedand is depicted in the flowchart of process 1060 (FIG. 17).

The avgProfilesByAccount process 1706 (FIG. 39), is depicted in theflowchart of FIG. 40. The avgProfilesByAccount process 1706 begins withthe Enter function shown in block 1750. The process then proceeds to thedecision block 1760, where the decision is made if getProfileRecords(rsProfiles) is TRUE and the count is greater than zero. If “NO”, theprocess proceeds to the Exit function of block 1770. If “YES”(getProfileRecords is TRUE and count is greater than zero), then theprocess proceeds to the decision block 1780, a Do while NOTrsProfiles.EOF function. If “NO”, the process proceeds to thegetZipCodes function of block 1820. If “YES” (NOT rsProfiles.EOF), thenthe process proceeds to the decision block 1790. In the decision block1790, the decision is made if homeZip is the same. If “NO”, the processproceeds to the getZipCodes function of block 1820. If “YES” (homeZip isthe same), then the process proceeds to the function of block 1800, Sumall call values.

From block 1800, the process then continues to the function of block1810, iPeriods equals iPeriods plus 1. The process then returns to thefunction Do while NOT rsProfiles.EOF of block 1780. Once the block 1780is “NO”, and leads to the getZipCodes function of block 1820, theprocess then continues to the decision block 1830. The decision is madein block 1830 if iPeriods is greater than zero. If “NO”, the processproceeds to the Exit function of block 1770. If “YES” (iPeriods isgreater than zero), then the process continues to the function of block1840, Average all sums. The process then continues to the Build profiledictionary function of block 1300. The Build profile dictionary functionis depicted in process 1300 (FIG. 25). The process then continues to theaddProfileRecord of block 1320 (FIG. 26), before proceeding to the Exitfunction of block 1770.

The getProfileRecords process of block 1760 is depicted in greaterdetail in the flowchart of FIG. 41. The getProfileRecords process 1760begins with the Enter function 1761, proceeds to the Calltwi_getProfileRecords stored procedure of block 1762, and then finisheswith the Exit function of block 1763.

Rebate Generator

The MAMBA system 100 of FIG. 1 may be further configured to include arebate processing system for providing a rebate or credit to a user whenless-expensive rate plans are available. The rebate processing systemmay be configured as instructional steps in software or firmware andincorporated into the MAMBA software 10 shown in FIG. 2A. Alternatively,the rebate processing system may be configured as hardware componentsthat perform the corresponding steps.

FIG. 42 is a block diagram of an embodiment of a rebate processingsystem 1850 for evaluating call detail records with respect to aplurality of rate plans and providing a rebate based on one or more rateplans that are more cost-effective than the rate plan under which atelecommunication user currently subscribes. The rebate processingsystem 1850 may be embodied as software or firmware instructionalmodules in the MAMBA software 10, which is described above with respectto FIG. 2A. Alternatively, the rebate processing system 1850 may beembodied in the MAMBA system 100 as hardware components.

The rebate processing system 1850 contains a call detail recordreceiving module 1852 that receives, using various accumulating and/orretrieving means, the call detail records of a telecommunication user.Preferably, the call detail records are received during a singleprevious billing period, but may also be received during multiplebilling periods. Typically, although not necessarily, a billing periodis equal to one month. The call detail record receiving module 1852 mayalso include a module for converting the call detail records to acalling profile record that is indicative of the calling patterns of thetelecommunication user by averaging the service usage over multiplemonths.

The rebate processing system 1850 further contains a service costcalculating module 1854 that receives at a first input the call detailrecords from the call detail record receiving module 1852. The servicecost calculating module 1854 receives at a second input 1856 informationpertaining to the present rate plan under which the user is currentlycontracted. The service cost calculating module 1854 calculates theactual service cost under the present plan, preferably for one billingperiod, and provides the calculated service cost to a rebate calculatingmodule 1858. The calculated service cost may also be provided to abilling processor for billing the user or deducting the service costfrom the user's account.

The rebate processing system 1850 further includes a hypotheticalservice cost calculating module 1860 that also receives the call detailrecords from the call detail record receiving module 1852. Thehypothetical service cost calculating module 1860 receives from a set ofinputs 1862 information pertaining to a plurality of rate plans, otherthan the present rate plan, which are available to the user. This rateplan information includes data that may be used to determine servicecosts based on the call detail records from module 1852. Thehypothetical service cost calculating module 1860 calculates a pluralityof hypothetical service costs corresponding to the number of availablerate plans. The hypothetical service costs refer to the service costshad the user been under a different rate plan, i.e. one of the pluralityof rate plans provided at inputs 1862. The respective service costs foreach available rate plan are provided to the rebate calculating module1858.

The rebate calculating module 1858 receives the actual service cost fromthe service cost calculating module 1856 and a plurality of hypotheticalservice costs from the hypothetical service cost calculating module1860. With these different service costs, the rebate calculating module1858 calculates a rebate according to predefined factors that determinethe criteria for calculating the rebate. For example, the rebatecalculating module 1858 may use the formula:R=d*(p−c)where R is equal to the rebate, d is equal to a detuning factor, p isequal to the service cost of the present rate plan, and c is equal to acost comparison value.

The cost comparison value c is a value based on at least one rate planthat would result in a savings to the user. The cost comparison value cprovides a value to which the cost of the current rate plan can becompared. The value c, for example, may be the hypothetical service costof the most cost effective plan that is available to the user. Usingthis optimal hypothetical service cost provides the greatest savings forthe user. Alternatively, c may be the average hypothetical service costof a number of the most cost effective plans. In this regard, atelecommunication company may advertise the rebate generating process asproviding a rebate to the user based on the average cost of five, orsome other number, of the most cost effective rate plans available. Thecost comparison value c may alternatively be equal to the averagehypothetical service cost of one or more, but preferably all, of theknown available rate plans that are less expensive than the current rateplan. Furthermore, the value c may be equal to the average hypotheticalservice cost of one or more, but preferably all, of the known availablerate plans that are equal to or less than the cost of the current rateplan.

The detuning factor d is a constant value between zero and one that ismultiplied by the difference between the cost of the present rate plan pand the cost comparison value c to scale down or detune the total rebatethat is provided to the user. In other words, a telecommunicationcompany offering such a rebate plan may decide to give a fraction of thehypothetical savings as a rebate. Preferably, the detuning factor may beabout 0.2, 0.4, or 0.6, representing 20%, 40%, or 60%, respectively, ofthe highest possible savings. Depending on a number of factors, thedetuning factor d may be determined in light of the criteria fordetermining the cost comparison value c.

The rebate that is calculated by the rebate calculating module 1858 isprovided to a rebate generating module 1864. The rebate generatingmodule 1864 provides the rebate to the user in one of a number ofpossible forms. For instance, the rebate generating module 1864 may beconfigured as a credit transmitting device such that the rebate isprovided to the user in the form of a credit applied to the user'saccount to reduce payments for future telecommunication service.Alternatively, the rebate generating module 1864 may be a check printingdevice such that the rebate is provided in the form of a check, such asa bank check or cashier's check, to the user's billing address. Therebate generating module 1864 may also include a mailing device forproviding to the user with the rebate check, as mentioned above, or witha coupon or gift certificate for merchandise or services in the amountof the rebate. The coupon or gift certificate may be either related orunrelated to telecommunication services.

FIG. 43 is a flow chart of an embodiment of a rebate generating processthat may be part of an engine, software, or circuit for generating arebate that is provided to the user of a telecommunication service plan.Block 1870 indicates that the call detail records are obtained, wherebythe call detail records are related to telecommunication service usageby the user. Preferably, the call detail records include the calls orother telecommunication service usage during a previous whole billingperiod. For example, the call detail records may be accumulated over aprevious month equal to one billing period. Alternatively, the calldetail records may be obtained from a plurality of previous billingperiods and converted to a calling profile record, as described above,for obtaining a profile that is indicative of the telecommunicationservice usage by the user. In this way, an average over a number ofbilling periods can be calculated for the user to obtain a more accuratecalling signature for the user.

After obtaining the call detail records, the rebate generating processproceeds to block 1872 in which the service cost under the present rateplan is calculated. The present rate plan is the plan under which theuser is currently contracted. The service cost is preferably calculatedon the basis of the call detail records obtained in block 1870. In block1874, hypothetical service costs are calculated by applying the calldetail record to a number of other available rate plans. These otheravailable rate plans are evaluated according to the call detail recordsor calling profile record in order to determine the hypothetical servicecosts had the user been under these different plans.

Block 1876 includes the process of providing a rebate to the user basedon at least one hypothetical service cost of at least one other rateplan that is less expensive than the present rate plan. The process ofproviding a rebate preferably includes the use of a mathematical formulathat calculates a savings that a user would have gotten had the userbeen on a more cost-effective rate plan. From the highest possiblesavings, the rebate generating process calculates an amount of a rebatethat is equal to or less than the difference in cost between the leastexpensive rate plan and the present rate plan. Since mosttelecommunication companies could not easily afford to give away arebate to undersell the rates of known competitors, a formula may bederived such that only a portion of the highest possible savings iscredited back to the user. For example, one such rebate generatingformula may be given by:R=d*(p−c)as repeated from above, where R is equal to the rebate, d is equal to adetuning factor, p is equal to the actual service cost of the presentrate plan, and c is equal to a cost comparison value.

The cost comparison value c is a value calculated on the basis of atleast one rate plan that would result in a savings to the user, asmentioned above. The detuning factor d is a constant value between zeroand one for detuning the total rebate provided to the user, as mentionedabove. The cost comparison value c and detuning factor d may bedetermined with respect to each other to adjust the amount and range ofrebates that may result from this formula.

The process of providing a rebate, as indicated in block 1876, mayfurther include the actual transfer of the calculated rebate to theuser. The rebate provided to the user may be in the form of a creditthat is applied to the user's account that may be used toward futuretelecommunication service. Alternatively, the telecommunication companymay provide the rebate in the form of a check, such as a bank check,that is sent to the user's billing address. Another way in which therebate may be provided is by providing a coupon or gift certificate formerchandise or services either related or unrelated to telecommunicationservices.

It should be emphasized that the above-described embodiments of thepresent invention, particularly, any “preferred” embodiments, are merelypossible examples of implementations, merely set forth for a clearunderstanding of the principles of the invention. Many variations andmodifications may be made to the above-described embodiment(s) of theinvention without departing substantially from the spirit and principlesof the invention. All such modifications and variations are intended tobe included herein within the scope of this disclosure and the presentinvention and protected by the following claims.

1. A system for processing rebates comprising: means for receiving calldetail records related to telecommunication service activity by atelecommunication user during a plurality of prior billing periods;means, in response to the call detail records, for calculating theservice cost of the telecommunication service activity during said priorbilling periods, the service cost calculating means calculating theservice cost on the basis of a current rate plan, said calculatedservice cost of the prior billing periods being weighted by applying aweighting function, the weighting function discounting earlier billingperiods relative to recent billing periods, the weighting function beingan exponential weighting envelope; means, in response to the call detailrecords, for calculating hypothetical service costs of thetelecommunication service activity during said prior billing periods hadthe telecommunication user been on one or more different available rateplans, said calculated hypothetical service costs being weighted byapplying the weighting function; means, in response to the service costcalculated by the service cost calculating means and the hypotheticalservice costs calculated by the hypothetical service costs calculatingmeans, for determining a most efficient service plan for thetelecommunication user by calculating an efficiency measure based atleast upon the hypothetical service costs and the service cost duringthe prior billing periods; means, in response to determining the mostefficient service plan for the telecommunication user, for calculating arebate based on a comparison between the service cost and a cost of themost efficient service plan; and means for crediting the rebate to thetelecommunication user.
 2. The system of claim 1, further comprisingmeans for converting the call detail records to a calling profile recordindicative of the calling pattern of the telecommunication user.
 3. Thesystem of claim 1, wherein the hypothetical service cost calculatingmeans calculates the hypothetical service costs for a plurality ofavailable rate plans.
 4. The system of claim 3, wherein the rebatecalculating means calculates the rebate based on a comparison betweenthe service cost and an average of at least one of the mostcost-effective rate plans.
 5. A method for generating a rebatecomprising: obtaining, in a computing system, call detail recordsrelated to telecommunication service activity by a telecommunicationuser during a plurality of previous billing periods; calculating, in thecomputing system and on the basis of the call detail records, a servicecost under a current rate plan and hypothetical service costs under oneor more other available rate plans; determining, in the computingsystem, a most cost effective service plan available to thetelecommunication user based at least upon the call detail records forthe previous billing periods, the most cost effective service plan beingdetermined by calculating a plurality of hypothetical service costs forthe previous billing periods for a plurality of available rate plans anddetermining a most efficient service plan for a plurality of previousbilling periods, the hypothetical service costs and the service costbeing weighted by applying a weighting function that discounts earlierbilling periods relative to recent billing periods associated with thetelecommunications user, the weighting function being an exponentialenvelope, the most cost effective service plan determined by identifyingthe hypothetical service plan with a highest efficiency measure for theprevious billing periods based upon the call detail records; andproviding a rebate based on a difference between the most cost effectiveservice plan and the current rate plan.
 6. The method of claim 5,wherein obtaining call detail records comprises obtaining recordsrelated to wireless telecommunication service activity by a wirelesstelecommunication subscriber.
 7. The method of claim 5, whereincalculating the hypothetical service costs comprises calculating theservice cost for each of a plurality of available rate plans had thetelecommunication user been under the respective rate plan.
 8. Themethod of claim 5, wherein providing a rebate further comprises:determining, in the computing system, a cost comparison value to whichthe service cost of the current rate plan is compared, wherein the costcomparison value is a cost of the most cost effective service plan;calculating, in the computing system, a difference between the servicecost of the current rate plan and the cost comparison value; anddetuning, in the computing system, the difference to obtain a rebatevalue.
 9. The method of claim 8, wherein determining the cost comparisonvalue comprises determining the hypothetical service cost of the leastexpensive rate plan.
 10. The method of claim 8, wherein determining thecost comparison value comprises averaging the hypothetical service costsof a number of the least expensive rate plans.
 11. The method of claim8, wherein determining the cost comparison value comprises averaging thehypothetical service costs of all the rate plans that are less expensivethan the current rate plan.
 12. The method of claim 8, wherein detuningthe difference further comprises multiplying the difference by adetuning factor.
 13. The method of claim 12, wherein the detuning factoris greater than zero and less than one.
 14. The method of claim 5,wherein providing a rebate further comprises solving the equation:R=d*(p−c) where R is equal to a rebate amount, d is equal to a detuningfactor, p is equal to the service cost of the present rate plan, and cis equal to a cost comparison value that is related to the hypotheticalservice costs of the one or more available rate plans.
 15. A businessmethod comprising: obtaining, in a computing system, call detail recordsrelated to telecommunication service activity by a telecommunicationuser during a plurality of previous billing periods; calculating, in thecomputing system and on the basis of the call detail records, a servicecost under a current rate plan and hypothetical service costs under oneor more other available rate plans; determining, in the computingsystem, a most cost effective service plan available to thetelecommunication user based at least upon the call detail records forthe previous billing periods, the most cost effective service plan beingdetermined by calculating a plurality of hypothetical service costs forthe previous billing periods for a plurality of available rate plans anddetermining a most efficient service plan for a plurality of previousbilling periods, the hypothetical service costs and the service costbeing weighted by applying a weighting function that discounts earlierbilling periods relative to recent billing periods associated with thetelecommunications user, the weighting function being an exponentialenvelope, the most cost effective service plan determined by identifyingthe hypothetical service plan with a highest efficiency measure for theprevious billing periods based upon the call detail records; andproviding a rebate based on a difference between the most cost effectiveservice plan and the current rate plan.
 16. The business method of claim15, further comprising: announcing that a rebate is provided to atelecommunication customer when at least one less expensive rate plan isavailable.
 17. The business method of claim 16, wherein the announcingfurther comprises advertising to potential telecommunication customers.18. The business method of claim 15, wherein providing a rebate furthercomprises providing a credit to an account of a telecommunicationsubscriber.
 19. The business method of claim 15, wherein providing arebate further comprises sending a check to a billing address associatedwith the telecommunication service usage.
 20. The business method ofclaim 15, wherein providing a rebate further comprises providing acoupon or gift certificate toward the purchase of merchandise orservices.
 21. A computer program stored on a computer-readable medium,the computer program comprising: logic configured to calculate theservice cost of a plurality of telecommunication rate plans, onetelecommunication rate plan including a current rate plan to which atelecommunication service user subscribes; logic configured to determinea most cost effective service plan available to the telecommunicationuser based at least upon call detail records for previous billingperiods associated with the telecommunication user, the most costeffective service plan being determined by calculating a plurality ofhypothetical service costs for the previous billing periods for aplurality of available rate plans and determining a most efficientservice plan for a plurality of previous billing periods, thehypothetical service costs and the service cost being weighted byapplying a weighting function that discounts earlier billing periodsrelative to recent billing periods associated with thetelecommunications user, the weighting function being an exponentialenvelope, the most cost effective service plan determined by identifyingthe hypothetical service plan with a highest efficiency measure for theprevious billing periods based upon the call detail records; and logicconfigured to provide a rebate to the telecommunication service userbased on the service cost of at least one telecommunication rate planthat is less expensive than the current rate plan.
 22. The computerprogram of claim 21, further comprising logic configured to receive calldetail records representing telecommunication service usage during oneprevious billing period.
 23. The computer program of claim 22, whereinthe logic configured to calculate further comprises logic configured toapply the call detail records to the plurality of telecommunication rateplans to obtain a service cost under the current rate plan andhypothetical service costs if the telecommunication service user wereunder the other telecommunication rate plans.
 24. The computer programof claim 21, wherein the logic configured to provide a rebate furthercomprises: logic configured to determine a cost comparison value towhich the service cost of the current rate plan is compared, the costcomparison value being the most cost effective service plan; logicconfigured to determine a difference between the cost comparison valueand the service cost of the current rate plan; and logic configured todetune the difference.
 25. The computer program of claim 24, wherein thelogic configured to determine a cost comparison value determines thecost comparison value based on the telecommunication rate plan with thelowest hypothetical service cost.
 26. The computer program of claim 24,wherein the logic configured to determine a cost comparison valuedetermines the cost comparison value based on the average hypotheticalservice cost of a number of the least expensive telecommunication rateplans.
 27. The computer program of claim 24, wherein the logicconfigured to detune the difference comprises multiplying the differenceby a detuning factor d where 0<d<1.